包含 connect、accept和close三个函数,并使用netstart程序调试TCP应用。

建立TCP连接:需要三个分节

1、服务器必须准备好接受外来的链接,可调用socket、bind和listen三个函数完成,被动打开;

2、客户调用connect发起主动打开。客户TCP发送一个SYN(同步)分节,告诉服务器客户将在连接中发送的数据的初始序列号。通常SYN分节不携带数据,该IP数据报只包含有一个IP首部、一个TCP首部及可能有的TCP选项。

3、服务器必须确认(ACK)客户的SYN,同时自己也得发送一个SYN分节,含有服务器将在同一个连接中发送的数据的初始序列号。服务器在单个分节中发送SYN和对客户的SYN的确认(ACK).

4、客户必须确认服务器的SYN。

每一个SYN可含有多个TCP选项,常用:

1、MSS选项。以太网上IPV4典型值1460。发送SYN的TCP一端告知对端他的最大分节大小即MSS,他在本链接的每个TCP分解中愿意接受的最大数据量。发送端TCP使用接收端的MSS值作为所发送分节的最大大小。TCP_MAXSEG套接字选项提取和设置该TCP选项。

2、窗口规模选项。使用SO_RCVBUF套接字选项影响该TCP选项。

3、时间戳选项。可防止由失而复得的分组可能造成的数据损坏。

TCP终止连接:需要4个分节。(橙色部分,总觉得书上说得太绕有歧义或是我自己理解得不好)

1、某应用进程首先调用close,该端主动关闭。该端TCP发送一FIN分节,表示数据发送完毕。

2、接受到该FIN的对端被动关闭。该FIN由TCP确认。它的接受也作为一个文件结束符(end-of-file)传递给应用进程(放在一排队等候该应用进程接受的任何其他数据之后),因为FIN的接受意味着接收端在相应链接上再无额外数据可接受。

3、一段时间后,接收到这个文件结束符的应用进程调用close关闭它的套接字。这将导致他的TCP也发送一个FIN。

4、接受该最终FIN的元发送端TCP确认该FIN。

通常四步,因为某些情形下,步骤一的FIN随数据一起发送;步骤二和步骤三发送的分解都出自执行被动反比的那一段,有可能合并成一个分节。

补充说明:

步骤2-3之间,从执行被动关闭一端到执行主动关闭一端流动数据是可能的,即半关闭。

当套接字关闭时,所在端TCP各自发送一个FIN,这是由应用进程调用close发生的。当一个Unix进程无论自愿(exit或main返回)还是非自愿(收到终止本进程信号)终止时,所有打开的描述符都被关闭,这也导致任然打开的任何TCP链接上发出一个FIN。

无论客户还是服务器,任何一段都可以执行主动关闭。通常情况是客户执行主动关闭。但某些协议,譬如HTTO/1.0由服务器执行主动关闭。

TCP状态转换图:tcp为一个链接定义了11种状态。

观察分组:

注意:服务器对客户请求的确认是伴随其应答发送的,该做法为捎带(piggybacking),他通常在服务器处理请求并产生应答的时间少于200ms时发生。如果耗时更长,经先确认再应答。

TIME_WAIT状态存在的两个理由:

1、可靠地实现TCP全双工连接的终止;假设最后一次ACK丢了来解释它,服务器将重新发送他的最终FIN,因此可恶必须维护状态信息,允许它重发最终ACK。客户端不得不准备好重传最终那个ACK。

2、允许老的重复分节在网络中消逝;两个IP和端口头一次建立连接后,下一次又建立了新的连接。后一个连接为前一个连接的化身,因为他们的IP地址和端口号都相同。TCP必须防止老的重复分组在该链接已终止后再出现被误解为属于同一连接的信息。所以,TCP将不给出于TIME_WAIT状态的链接发起新的化身。TIME_WAIT状态的持续时间是MSL的2倍,这足以让某个方向上的分组最多存活MSL秒后被丢弃,另一个方向上的应答最多存活MSL秒后也被丢弃。、

常见协议使用的协议情况:

转载于:https://www.cnblogs.com/weiyi-mgh/p/6683933.html

TCP链接的建立与终止相关推荐

  1. TCP连接的建立与终止

    一. "三路握手"建立连接 1.服务器(通常通过调用socket.bind.listen来完成--"被动连接")必须准备接受外来的连接.:     2.客户机( ...

  2. 【TCP/IP详解 卷一:协议】第十八章 TCP连接 的建立与终止 (2)其余内容

    18.5 TCP的半关闭 牢记 TCP 是 全双工 的. 半关闭:TCP提供了连接的一端 在结束了它的发送后 还能接收来自另外一端数据的能力.但是只有很少的应用程序利用它. 为了实现这个特性,编程接口 ...

  3. TCP/IP传输层协议实现 - TCP连接的建立与终止(lwip)

    1.lwip tcp相关数据结构 1.1.tcp报文格式 <TCP-IP详解卷 1:协议>TCP包首部结构如下: 1.2.lwip tcp数据结构 tcp相关数据结构如下,tcp_pcb_ ...

  4. TCP连接的建立和终止

    一.三路握手 二.TCP连接关闭时的分组交换 三.TCP状态转换图 四.TCP连接的分组交换 转载于:https://www.cnblogs.com/soldierback/p/10624130.ht ...

  5. tcp抓包返回fin_TCP/IP学习二TCP链接建立与断开

    今天详细学习下TCP链接的三次握手四次挥手,因为开发web服务还是会经常遇到一些网络问题的.其实这方面的资料很多,可能我们看过很多次但也忘了无数次[捂脸],这次我主要通过抓包例子来展示这个过程. TC ...

  6. 深入理解TCP/IP协议-TCP建立与终止连接

    转载自  深入理解TCP/IP协议-TCP建立与终止连接 一.引言   TCP 是一个面向连接的协议.无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.连接创建与终止的状态变化图如下: ...

  7. [TCP/IP] TCP建立与终止

    TCP的建立与终止 三次握手与四次挥手 TCP提供一种可靠.面向连接.字节流.传输层的服务.TCP是一种面向连接的单播协议. 一个TCP连接由一个4元组构成,它们分别是源IP地址和源端口号,目的IP地 ...

  8. 【转】tcp链接的状态

    tcp链接的几种状态 博客分类: C语言&Linux@嵌入式开发 说明: 通常情况下:一个正常的TCP连接,都会有三个阶段:1.TCP三次握手;2.数据传送;3.TCP四次挥手 里面的几个概念 ...

  9. 实时监测tcp链接状态_终于搞懂了 TCP 的 11 种状态,太不容易了…

    后台回复"666",获取新资料 本来想写运维过程中,nginx 服务器中 time_wait 的相关测试及解决方法的,然后发现TCP 的状态需要先铺垫一下,于是就整理了这篇文章. ...

最新文章

  1. 单机 “5千万以上“ 工业级 LRU cache 实现
  2. 用大顶堆实现最大优先队列
  3. Zabbix之监控Mysql性能
  4. node --- 创建一个Socket客户端连接到服务器
  5. cdi 2.7.5_看一下CDI 2.0 EDR1
  6. Linux每个目录的介绍
  7. spring源码之bean加载(bean解析下篇)
  8. 那些做Android开发必须知道的ADB命令
  9. 大数据中数据清理怎么做的_大数据清洗的方法 数据清洗的基本流程 | 星云联动...
  10. Android Tips 7
  11. 深度学习: Epoch 是什么?
  12. 计算机互联网职业高中排名,职业高中有哪些热门专业可选择
  13. QT开发--Visual Studio2013--配置代码32bit、64bit环境
  14. php从照片中抠出人脸,PS怎样将一张图片上的人脸抠取五官下来到另一张图片
  15. 【矩阵论】1.准备知识——复数域上的内积域正交阵
  16. 团队博客-11月19日
  17. nginx配置的server_name无法访问
  18. 计算机除尘 注意事项,数码相机除尘注意事项
  19. 如何学好linux,linux的学习建议
  20. linux c++ 等待函数,JavaScript在nodejs中实现sleep休眠函数wait等待的方法

热门文章

  1. Hibernate3的jar包
  2. OpenResty(nginx)操作redis的初步应用
  3. 第2章 算法1---《大话数据结构》读书笔记
  4. 【Linux下Inotify + Rsync文件实时同步】
  5. python123第九周测验答案2020_知到智慧树2020艺术概论章节测验答案
  6. python读取数据库后生成网页_python查询数据库并将结果按照格式生成HTML页面展示...
  7. python函数-返回菲波那切数列for,range,append
  8. python中字符串(二)-访问值、更新、转义、运算
  9. 利用Python脚本编写一个学生平均成绩
  10. HTML与CSS布局技巧总结,Html和CSS布局技巧总结(偶尔回顾回顾布局也是很有必要的)...