unix网络编程(二)Tcp:传输控制协议

1、TCPTransmission Control Protocol,传输控制协议),其提供一下服务:

    一)TCP提供客户与服务器的链接,一个客户建立与一个给定服务器的链接,跨越链接与那个服务器交换数据,然后终止链接。

    二)TCP提供可靠性,当TCP向另一端发送数据时,它要求对方返回一个确认。如果确认没有收到,TCP自动重传数据并等待更长时间。在数次重传失败后,TCP才放弃。重传数据所花的时间传统上是4-10分钟。tcp含有动态估算客户到服务器往返所花时间RTT(round-trip time)的算法,因此其知道等待-确认需要多长时间。

   三)TCP通过给所发送数据的每一个字节关联一个序列号进行排序。如果分解非顺序到达,接收方的tcp将按照他们的序列号冲虚排序,再把结果数据传送到应用进程。如果tcp收到重复的数据(譬如说对方认为一个分节丢失并因而重传,而他并没有真正丢失,只是刚才网络通信过于拥挤而延迟),它可以根据序列号判定数据是重复而直接丢弃该分节。

四)TCP提供流量控制。tcp总是告诉对方它还能接受多少字节的数据,这称为通告窗口(advertised window)。任何时候这个窗口指出接收缓冲区中的可用空间,从而确保发送方发送的数据不会溢出接收缓冲区。当接收发送方的数据时,窗口大小减小,而当接收方应用进程从缓冲区中读取数据时,窗口大小增大。当tcp的接收缓冲区满时,窗口的大小减小到0,必须等待应用进程从这个缓冲区中读取数据后才能再接收从发送方来的数据。

五)TCP的连接是全双工的,即在给定的连接上应用进程在任何时候既可以发送也可以接收数据。

2、TCP三次握手

    一)服务器必须准备好接收外来的链接。这通过调用socket、bind和listen函数来完成,称为被动打开(passive open)。
    二)客户通过调用connect进行主动打开。这使客户tcp发送一个SYN分节(表示同步),它告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号。一般SYN分节不携带数据,只含有一个IP头部、一个TCP头部以及可能有的tcp选项。
    三)服务器必须确认客户的SYN,同时自己也得发送一个SYN分节,包含服务器将在同一连接中发送的数据的初始序列号,以及在同一分节中对客户SYN的ACK。
    四)客户必须确认服务器的SYN。 如图1所示:
图1中给出的客户的初始序列号是J,而服务器的初始序列号为K。在ACK里的确认号为发送这个ACK的一方所期待的对方的下一个序列号。因为SYN只占一个字节的序列号空间,所以每个SYN的ACK的确认号都是相应的序列号加1。

                    3、TCP连接终止

一)某一个应用进程首先调用close,我们称这一端执行主动关闭。这一端的TCP于是发送一个FIN分节,表示数据发送完毕。
二)接收到FIN的另一端执行被动关闭。这个FIN由tcp确认,它的接收也作为文件结束符传递给接收方应用进程(放在已排队等候应用进程接收的任何其他数据之后),因为FIN的接收意味着应用进程在相应连接上再也接收不到额外数据。
三)一段事件后,接收到文件结束符的应用进程将调用close关闭它的套接口,接收端并发送一个FIN。
四)原发送方对该FIN进行确认。如图2
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值