1、在每个TCP报文段中,头部的flag字段里的SYN,FIN,RST,PSH可以多个有效,并没有限定为必须只有一个

2、TCP连接建立过程:

1)客户端发送一个SYN报文段,其中包含了客户端要传送的初始字节序列J

2)服务器端收到上述报文段,并且返回一个报文段,其中包含了服务器端的SYN序号K,以及对客户端SYN序号的响应信号ACK,J+1,其实ACK确认序列号指的是服务器端希望从客户端得到的下一个字节流的序号,由于SYN消耗了一个序号,因此返回的ACK确认序号为J+1

3)同样,接收到从服务器段发送来的报文段后,客户端同样返回一个ACK确认序号K+1,由此,三次握手结束,TCP连接建立(需要注意的是,两个初始同步序号SYN都是随机的,这是为了避免之前连接中在网络中发生延时的报文段,对当前的连接造成的混乱)

3、TCP连接关闭:因为TCP是一个全双工的传输过程,两个方向的传输是各自独立的,因此需要各自关闭连接。当一方需要关闭连接时,只需要向对方发送一个FIN报文段,此时接收方就不能接收来自对方的数据了,但是仍然可以向对方发送数据。这就是所谓的half-close。当双方都向对方发送FIN,并都收到对方的ACK之后,整个TCP连接结束。这里需要注意的是,FIN同SYN一样也要消耗一个序列号,同时两个方向的数据传输的关闭是独立的,如果一方关闭了连接,其实另一方是感觉不到的!

4、MSS(Maximum Segment Size):一个TCP报文段中能传送的最大的数据部分的长度。一般在建立连接时,连接的双发都会发送各自期望的MSS。通常MSS越大越好,因为这样一次性传输的数据就越多。但是前提不能让IP数据报产生分片,所以最大的MSS其实等于(PATH MTU-40)其中40是20个字节的IP数据报头部和20字节的TCP头部

5、MSL(Maximum Segment Lifetime):一个TCP报文段在网络中能够存在的最长的时间。在TCP连接关闭过程中,发出最后一个ACK的一方要等到2倍的MSL之后才能真正结束这次连接(也就是说在这期间不能去建立新的连接),目的是为了防止对方没有收到ACK而重发了一个FIN。

6、Reset Segment:TCP会返回一个Reset报文段,当收到报文段对应的目的端口并没有进程在监听时。Reset报文段的RST置位且同步序号为0。通常由FIN报文段发起的关闭连接称为orderly release,因为在发出FIN之前,缓存中的数据都被发出了,并没有数据丢失。相反,RESET引起的连接关闭被称为abortive release,因为缓存中的数据直接被丢弃了,并且立即发送REST报文段。

7、Simultaneous Open:指的是当两台主机同时给对方发送SYN数据报建立连接,比如在同一时刻主机A在7777端口向主机B的8888端口发起了一个连接,主机B在8888端口也向主机A的7777发起了连接。这时其实只有建立起一条连接,只要一端收到了SYN和ACK,那么它就进入了连接状态。而且两端互为client和server。当然有Simultaneous Open 自然有Simultaneous Close ,过程其实是类似的,具体如下图所示:

8、TCP服务器中通常有一个称为backlog的队列用于缓存到达的连接请求,如果队列中有空闲空间,那么TCP就会与其建立连接,并且在server空闲的时候将连接交给它(而在这之前server是不知道这个连接的存在的),否则直接将请求忽略(可以让客户端重发连接请求,也许那时候队列就有空闲了)。

《TCP/IP详解 卷一》读书笔记-----TCP连接建立的更多相关文章

  1. 《TCP/IP详解》读书笔记

    本书以UNIX为背景,紧贴实际介绍了数据链层.网络层.运输层   一.整体概念   1.各层协议的关系,只讨论四层 各层常见的协议:   网络层协议:IP协议.ICMP协议.ARP协议.RARP协议. ...

  2. TCP/IP详解 卷一学习笔记(转载)

    https://blog.csdn.net/cpcpcp123/article/details/51259498

  3. 『TCP/IP详解——卷一:协议』读书笔记——10

    2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...

  4. 『TCP/IP详解——卷一:协议』读书笔记——01

    从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...

  5. 【TCP/IP详解 卷一:协议】第二章:链路层

    2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...

  6. 『TCP/IP详解——卷一:协议』读书笔记——02

    2013-08-16 20:07:11 1.3 TCP/IP的分层 这是一个很好的图,要多看!!图上有些细节会在今后的笔记中提到,看不懂不必深究. IP是网络层上的主要协议,同时被TCP和UDP(这两 ...

  7. 『TCP/IP详解——卷一:协议』读书笔记——18

    2013-08-27 15:44:52 第7章 Ping程序 7.1 引言 “ping”这个名字来源于声纳定为操作.Ping程序由Mike Muuss编写,目的是为了测试另一台主机是否可达.该程序发送 ...

  8. 『TCP/IP详解——卷一:协议』读书笔记——15

    2013-08-25 13:39:40 第6章 ICMP:Internet控制报文协议 6.1 引言 ICMP经常被认为是IP层的一个组成部分.它传递差错报文以及其他需要注意的信息.ICMP报文同通常 ...

  9. 『TCP/IP详解——卷一:协议』读书笔记——14

    2013-08-25 11:32:06 第5章 RARP:逆地址解析协议 5.1 引言 具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址.但是无盘机,如X终端或无盘工作站,则需要采用其 ...

  10. 『TCP/IP详解——卷一:协议』读书笔记——13

    2013-08-24 16:03:39 4.6 ARP代理 ARP代理(Proxy ARP):如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求.这样可 ...

随机推荐

  1. json format validator

    http://la5u.org/archives/542 http://stedolan.github.io/jq/download/ https://linuxtoy.org/archives/jq ...

  2. MyBatis的一些基本操作

    在学校里只学过一点点的hibernate基础,但是这几天被熊哥叫去写好几个类的接口,所以就去百度了一下mybatis的接口方式怎么使用.1定义接口,并且定义其中要使用到的方法,这里必须注意到的是方法名 ...

  3. JVM中显示锁基础AbstractQueuedSynchronizer

    在研究AbstractQueuedSynchronizer的时候我是以ReentrantLock入手的.所以理所当然会设计到一些ReentrantLock的方法.因为网上已经有很多关于AQS的文章了, ...

  4. [ASP.NET MVC] 使用Bootsnipp样式

    [ASP.NET MVC] 使用Bootsnipp样式 前言 在「[ASP.NET MVC] 使用Bootstrap套件」这篇文章中,介绍了如何在Web项目里使用Bootstrap套件,让用户界面更加 ...

  5. event 对象 小记

    event对象的属性提供了有关事件的细节并且通过event对象的方法,可以控制事件的继续传播和阻止事件的默认行为 2级DOM Events 标准定义了一个标准的事件模型  被除了IE外的所有现代浏览器 ...

  6. 编写简单的C/S聊天程序

    找了点资料看了下,于是自己动手做了一个练习一下, 主要用到TServerSocket和TClientSocket这个控件. 客户端: var Form1: TForm1; NewTime:string ...

  7. 关于一个软件ipa包的其他图片资源

    有时候 当你打开一个ipa包内容的时候    可能会找不到全部的资源     所以你需要在github上下载一个插件 下载下来以后   运行一下 然后会出来这个 把ipa  文件   拖到里面     ...

  8. 【读书笔记】iOS-GCD-使用方法

    代码: -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { dispatch_async(dispatch_get_gl ...

  9. android 之 animations 动画

    android 提供的了两种机制你可以用来创建简单的动画:tweedned animation(渐变动画) 和 frame-by-frame animation(逐帧动画)(有道翻译的,汗!!!) . ...

  10. 如何修改opencms数据库配置

    修改/webapps/opencms/WEB-INF/config/opencms.properties文件 什么情况下需要修改配置? 1. 使用过程中,修改数据库配置: 2. 太长时间没接触服务器, ...