标签:
TCP是面向连接的传输层协议
TCP的传输是可靠传输
TCP是全双工的通信
TCP的连接是点对点的传输
源端口和目的端口各占2个字节
序号占4个字节
确认号占4个字节
数据偏移、保留和窗口共同占有4个字节
检验和、紧急指针共同占有4个字节
以上的这些共同构成TCP头部的固定首部
再加上可选的选项和填充构成TCP的首部
TCP报文由TCP首部和传输的数据组成
第一次握手:客户端发送syn(syn=x)请求包到服务器,进入syn_send状态
第二次握手:服务器收到客户端发来的syn包,确认客户的syn包(ack=syn+1),然后再发送请求包syn(syn= y)到客户端,所以就发送的是ACK+SYN包给客户端,进入syn_recv状态
第三次握手:客户端接收到服务器发来的ack+syn包,确认服务器的syn包(ack = syn+ 1),发送ack包,进入established状态
三次握手建立连接之后,才开始发送数据,若没有断开连接,则连接将会一直进行下去
不可以,采用三次握手是为了防止失效的连接请求报文段突然又发送给服务器,产生错误。
如下场景:若客户端发送了一个请求给服务器,但是因为网络时延等问题请求包迟迟没有到达服务器,过了一段时间后,客户端重新发送了一个请求,服务器接收到了发送确认并建立了连接。在通信之后,断开连接。但是原来第一个请求包又重新发给了服务器,服务器收到了就发送给客户端一个确认,但是实际上客户端并没有发送请求,所以不会理会。这样服务器就一直等待客户端发送数据,造成服务器资源浪费。
第一次挥手:客户端发送一个fin(fin = x)包,告诉服务器不会再发送数据到服务器了,但此时客户端还是可以继续发送和接收数据
第二次挥手:服务器收到客户端发来的断开连接的请求,确认发送一个ack包(ack= x+1),此时客户端只能接收数据不能发送数据
第三次挥手:当服务器发送完数据之后,就会发送一个断开连接的请求fin包(fin = y),告诉客户端“我的数据也发送完了”
第四次挥手:当客户端收到服务器发来的断开连接的请求时,确认发送一个ack包(ack = y+1),这时双方都断开连接,不能再收发数据
TCP流量控制:
TCP拥塞控制:
标签:
原文地址:http://www.cnblogs.com/sker/p/5926049.html