02,网络编程

  首先服务端处于鉴定状态,然后客户端发送一条请求syn和安好seq=x,服务端收到请求和暗号开始响应,给客户端发送syn请求,暗号y和响应信号ack=x+1(1表示成功,0表示失败),客户端收到来世服务端的暗号与服务端发送的响应信号ack比对,比对成功,成功建立客户端到服务端的数据传输路线.注意:如果一直有大量客户端发送syn请求,而没有大量建立服务端到客户端的数据传输路线,则很大程度表明有人在攻击服务端,用这个方法阻碍正常用户的syn请求进入

数据传输层四次挥手:首先服务端成功传输了所有数据给客户端,然后开始发送一条关闭服务端的数据传输线路的请求fin,暗号seq=x+2,客户端接收到请求,响应并关闭了服务端到客户端的数据传输线路,        并发送响应信号ack=x+3给服务端,服务端收到客户端发送的响应信号并与暗号景象比对,比对成功,得到服务端到客户端的数据传输路线已经关闭的信息.        等到客户端也成功传输了所有数据,客户端发送关闭客服端到服务端的数据传输路线的请求fin和暗号seq=y+1,服务端收到请求,发送响应信号ack=y+2给客户端,并关闭了客户端到服务端的        数据传输路线,客户端收到响应信号ack并拿他与暗号进行比对,比对成功,的到客户端到服务端色数据数据传输线路以关闭的信息.        注意:因为fin_wait1/2都是在很快色时间内完成的,而time_wait则会等待一段时间,如果time_wait等待的时间较长,则很大可能表明有很多用户在使用服务端.半连接池:由于建连接时,只能一条条请求的来,有客户端对服务端发送了请求,吓一跳客户就会相似等待,因此有了半连接池,他的工作原理是在客户端请求成功被服务端接手后,服务端不会马上对该请求        发出响应,只要把这些请求存进半链接池内,只要半链接池没有满,客户端的请求就会进入服务端,如果半链接池满了,那么请求也会被阻拦在外面显示等待,而且半连接池会通过服务端响应最早进入        的客户端请求,达到泄洪的目的        注意:半连接池限制的同同一时间的客户端请求数,而非连接数

2、为何tcp协议是可靠协议,而udp协议是不可靠协议?????

tcp协议是可靠协议又称好人协议,tcp需要先建立链接,tcp发送数据到客户端口需要等到客户端返还回来,过程可能发生网络断开等原因,只有接受到成功的反馈才会清除数据.优点.传输数据安全,可靠.  缺点  效率低下

UDP协议 :传输数据不用建立链接,找到客户端的端口就丢过去,数据发送完毕就清楚数据,不管客户端是否完全接收优点;效率高,  缺点:客户端没接受到信息就把服务端数据清除掉了

4、标识地址的方式:ip+mac就能标识全世界范围内独一无二的一台计算机ip+mac+port就能标识全世界范围内独一无二的一个基于网络通信的应用软件url地址:标识全世界范围内独一无二的一个资源

5、tcp协议建立连接与断开连接的状态信息以及表示的意义


----------------------------------------------------------------------------------------------------------------------------end--------------------------------------------------------------------------------------------

CLOSED:表示关闭状态(初始状态)。

LISTEN:该状态表示服务器端的某个SOCKET处于监听状态,可以接受连接。

SYN_SENT:这个状态与SYN_RCVD遥相呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,随即进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT状态表示客户端已发送SYN报文。

SYN_RCVD: 该状态表示接收到SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂。此种状态时,当收到客户端的ACK报文后,会进入到ESTABLISHED状态。

ESTABLISHED:表示连接已经建立。

FIN_WAIT_1: FIN_WAIT_1和FIN_WAIT_2状态的真正含义都是表示等待对方的FIN报文。区别是: FIN_WAIT_1状态是当socket在ESTABLISHED状态时,想主动关闭连接,向对方发送了FIN报文,此时该socket进入到FIN_WAIT_1状态。 FIN_WAIT_2状态是当对方回应ACK后,该socket进入到FIN_WAIT_2状态,正常情况下,对方应马上回应ACK报文,所以FIN_WAIT_1状态一般较难见到,而FIN_WAIT_2状态可用netstat看到。

FIN_WAIT_2:主动关闭链接的一方,发出FIN收到ACK以后进入该状态。称之为半连接或半关闭状态。该状态下的socket只能接收数据,不能发。

TIME_WAIT: 表示收到了对方的FIN报文,并发送出了ACK报文,等2MSL后即可回到CLOSED可用状态。如果FIN_WAIT_1状态下,收到对方同时带 FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。

CLOSE_WAIT: 此种状态表示在等待关闭。当对方关闭一个SOCKET后发送FIN报文给自己,系统会回应一个ACK报文给对方,此时则进入到CLOSE_WAIT状态。接下来呢,察看是否还有数据发送给对方,如果没有可以 close这个SOCKET,发送FIN报文给对方,即关闭连接。所以在CLOSE_WAIT状态下,需要关闭连接。

LAST_ACK: 该状态是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文。当收到ACK报文后,即可以进入到CLOSED可用状态。

tcp第十一种状态:

CLOSING:这种状态较特殊,属于一种较罕见的状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。



原文地址:https://www.cnblogs.com/lijieshi/p/9270858.html

时间: 2024-10-31 17:38:20

02,网络编程的相关文章

Python网络编程02/基于TCP协议的socket简单的通信

目录 Python网络编程02/基于TCP协议的socket简单的通信 1.昨日内容回顾 2.socket 2.1 socket套接字 2.2 基于TCP协议的socket简单通信 Python网络编程02/基于TCP协议的socket简单的通信 1.昨日内容回顾 1.单播:单独联系某一个人 2.广播:给所有人发送消息(群发) 3.比特流:bit就是0101跟水流一样的源源不断的发送01010101 4.以太网协议:将数据进行分组:一组称之为一帧,数据报 head|data head:18字节:

02 Socket网络编程

概述: Socket又称为套接字,用于描述IP地址和端口,是一个通信链的句柄: Socket是为网络编程提供的一种机制: 通信两端都有Socket,网络编程就是Socket之间的通信,数据在两个Socket之间通过IO流传输. 学习Socket编程之前,先要了解网络通信的三i个要素,即IP.端口号和传输协议. ip是设备在网络里面的地址. 端口号是用于标识进程的逻辑地址 每个网络程序都会至少有一个逻辑端口 用于标识进程的逻辑地址,不同进程的标识 有效端口:0-65535,其中0-1024系统使用

java网络编程socket解析

转载:http://www.blogjava.net/landon/archive/2013/07/02/401137.html Java网络编程精解笔记2:Socket详解 Socket用法详解 在C/S通信模式中,client需要主动创建于server连接的Socket(套接字).服务器端收到了客户端的连接请求,也会创建与客户连接的Socket.Socket可看做是通信两端的收发器.server与client都通过Socket来收发数据. 1.构造Socket 1.Socket() 2.So

Android网络编程网上文章总结

关于网络编程,网上也有许多好的文章,这里我就选了几篇觉得不错的归纳到了一起,仅供参考 Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包套接字(socket).Internet协议.常见Http处理等.比如:创建URL,以及URLConnection/HttpURLConnection对象.设置链接参数.链接到服务器.向服务器写数据.从服务器读取数

扯谈网络编程之自己实现ping

ping是基于ICMP(Internet Control Message Protocol)协议实现的,而ICMP协议是在IP层实现的. ping实际上是发起者发送一个Echo Request(type = 8)的,远程主机回应一个Echo Reply(type = 0)的过程. 为什么用ping不能测试某一个端口 刚开始接触网络的时候,可能很多人都有疑问,怎么用ping来测试远程主机的某个特定端口? 其实如果看下ICMP协议,就可以发现ICMP里根本没有端口这个概念,也就根本无法实现测试某一个

Python网络编程1--笔记

网络编程 一.客户端与服务器架构 硬件的客户端与服务器架构:打印机服务器,文件服务器 硬件服务器有关门的设备,打印机服务器有打印机,文件服务器NFS有磁盘. 软件的客户端与服务器架构:web服务器,数据库服务器,窗口服务器 软件服务器主要提供程序的运行,数据的发送与接收,合并,升级或其他的程序或数据的操作. 在完成服务之前,服务器必须要先完成一些设置.先要创建一个通讯端点,然服务器能"监听"请求.一单通讯端点创建好之后,我们在"监听"的服务器就可以进入他那等待和处理

Android网络编程(一)HTTP协议原理

相关文章 Android网络编程(一)HTTP协议原理 Android网络编程(二)HttpClient与HttpURLConnection Android网络编程(三)Volley使用方法全解析 Android网络编程(四)从源代码解析volley Android网络编程(五)OkHttp2.x使用方法全解析 Android网络编程(六)OkHttp3使用方法全解析 Android网络编程(七)源代码解析OkHttp前篇[请求网络] Android网络编程(八)源代码解析OkHttp后篇[复用

(一)网络编程基础之套接字入门

套接字基础 首先,我们来思考下这样一个问题:为什么要使用套接字进行网络编程? 答:Linux环境下使用套接字进行进程之间的通信.套接字接口(socket interface)是一组函数,也是操作系统提供给应用程序的接口.在Unix系统中,套接字和Unix I/O函数结合起来,用来创建网络应用程序.(也就是说,操作系统对外只提供了套接字作为网络通信的接口,假如想进行网络通信,套接字我们用也得用,不用也得用,而且使用套接字来进行网络通信是十分通用的方法).这里最典型的就是客户端--服务器模型. 因特

JavaSE_ 网络编程 目录(26)

黑马程序员_JavaSE学习总结第26天_网络编程26.01 网络编程概述26.02 网络模型概述和图解26.03 网络编程三要素概述26.04 网络编程三要素之IP概述126.05 InetAddress类的概述和使用26.06 网络编程三要素之端口26.07 网络编程三要素之协议26.08 Socket通信原理26.09 UDP协议发送数据26.10 UDP协议接收数据26.11 UDP协议发送和接收数据代码优化26.12 发送端的数据来自于键盘录入案例26.13 多线程实现聊天室程序26.