TCP协议


TCP协议(传输控制协议)

特点
     1、面向连接的传输层协议
     2、每一条TCP连接只能有两个端点,及只能是一对一的
     3、TCP提供可靠交付的服务
     4、TCP提供全双工通信
     5、面向字节流
注意:TCP连接的两个端点,不是主机,不是主机的IP地址,不是应用进程,不是传输层的协议端口,而是套接字(socket)。


可靠传输的工作原理
  TCP发送的报文段是交给IP层的,但IP层只能提供尽最大努力服务,也就是说,TCP下面的网络所提供的是不可靠的传输,因此TCP必须采用适当的措施才能使两个传输层之间的通信变得可靠。
  1、停止等待协议(每发送完一个分组就停止发送,等待对方确认。在收到确认后再发送下一个分组。)


  2、连续ARQ协议和滑动窗口协议

  接收方一般采用累积确认的方式,即接受方不必对收到的分组逐个发送确认,而是可以在收到几个分组后,对按序到达的最后一个分组发送确认,可以表示到这个分组为止的所有的分组都已经确认收到了。
  优点:容易实现,即使确认丢失也不必重传。
  缺点:不能向发送方反应接受方已经正确收到的所有分组的信息。

TCP报文段的首部格式


数据偏移:即TCP报文段的首部长度。

六个控制位:
     1、紧急 URG:为1时,表明紧急指针有效,即告诉系统此报文段中有紧急数据,需要优先传送(相当于高优先级的数据)。
      
     2、确认 ACK:仅当ACK为1确认号字段有效。为0时无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置为1.
     3、推送 PSH:当两个应用进程进行交互式的通信时,有时在一端的应用进程希望键入一个命令后立即收到对方的响应。
     4、复位 RST:为1时,连接出错,必须释放连接,重新建立连接,此外还用来拒绝一个非法的报文段或拒绝打开一个连接,也称为重建位或重置位。
     5、同步 SYN:在连接建立时用来同步序号。
     6、终止 FIN:用来释放一个连接。
   
紧急指针:占2字节。紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的末尾在报文段中的位置。当所有的紧急数据都处理完时,TCP就告诉应用程序恢复到正常的操作。注意,即使窗口为0时也可发送紧急数据。

TCP的连接建立(三次握手)

TCP释放连接(四次挥手)


为什么需要三次握手?
  为了防止已失效的连接请求报文段突然又传送到服务器,因而产生错误。
  例如:client发出的第一个连接请求报文段并没有丢失,而是在某一个网络点滞留了,以致延误到连接释放以后的某一个时间才到达server,本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发送一个新的连接请求。于是就需要做出应答,同意建立连接,假设不采用三次握手,那么只要server发出确认,新的连接就建立了。但server却认为新的运输连接已经建立,并且一直等待client发送数据,这样server的很多资源就会白白的浪费掉了。采用三次握手的办法可以防止上述现象的发生。如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。其主要的目的就是防止server端一直等待,浪费资源。

为什么需要四次挥手?
  这是因为在建立连接时,服务端的LISTEN状态下的SOCKET当收到SYN报文的建立连接请求后,他可以把ACK和SYN放到一个报文里来发送,但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你未必会马上关闭SOCKET,也可能你还有数据需要发送之后,再发送FIN报文给对方来表示你同意关闭连接了,所以他这里的ACK和FIN报文多数情况下都是分开执行的。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值