TCP相较UDP,是一种面向连接的可靠数据包传递。
三次握手,相当于打电话中的喂,只是为了确定链路通畅,建立连接,本身不包含数据。
1)先发起请求的为客户端。
2)SYN是发起连接请求标志位,ACK是应答请求标志位,FIN是结束连接标志位,虽然只是占1个位,但是需用1个字节发送的。
这些个标志位可以类比flag置1或置0的操作。
3)SYN消耗一个包号。
4)包号是传输字节的编号,一个字节对应一个包号(编号)
5)syn是建立连接请求的意思
第一次:客户端(C) --(发起连接请求)--> 服务器端(S)
SYN 1000(0) //1000是包号,0是包中携带的数据(字节数),SYN是一个标志位,虽 //然 只占1位,但是需要一个字节来存储,所以,占了1 个字节
第二次:客户端(C) <--(应答客户端连接请求,同时发起连接请求)-- 服务器端(S)
SYN 8000(0), ACK 1001 //ACK 应答第1次的SYN,确认号是下一个希望接收到字节的编号
//向客户端发送连接请求
第三次:客户端(C) --(应答服务器的连接请求)--> 服务器端(S)
ACK 8001 //只需要对服务器进行应答即可,不需要再发起请求了
三次握手,跟发送的数据无关,只是确定网络是否畅通。类比打电话的喂
第二次握手后,客户端已经建立了对服务器的连接,第三次握手后,服务器才建立了对客户端的连接。
断开连接的四次握手,是由于允许半关闭的状态,即允许一端先关闭(不发送连接请求了,只能接),另一端再关闭。
可以看到,在三次握手的中,是带有syn标志的,在建立连接之后的数据传输过程是不带syn的。
syn(0),未携带数据,但syn标志位占了一个字节;传输数据的过程中包号后是携带数据的;
ACK,只是应答,不携带数据的,携带数据的前面写的包号部分。
客户端主动发起连接,服务器端被动连接,
socket程序中,即connect -----客户端发送syn;
accept------服务器端发送syn,ack;
connet----客户端发送ack,connect正确返回,则三次握手建立。
如下图所示,客户端可以连续发多次,然后,服务器进行统一回复。
传递的数据包中syn中的0对应下图中的序号,ack中的1对应下图中的确认序号,
syn,ack对应下图中的标志位。
同时,在下图中,也可以看到,端口号是16位,即端口号最大是65535