TCP/IP详解 笔记十四

时间:2022-09-13 22:00:45

TCP/IP协议(二) 

连接的建立与终止

tcpdump -S输出TCP报文的格式

格式: 源>目的:标志 (标志就是tcp头部)。标识首字符意义如下:

TCP/IP详解 笔记十四

例如:telnet 某服务的输出(包括连接建立和终止)

TCP/IP详解 笔记十四

标识解释:S 1415531521:1415531521(0) win 4096 <mss 1024>

S(SYN):代表建立一个连接

1415531521:1415531521(0) :本次传送的首字节序号是1415531521(这里是ISN),尾字节序号是1415531521,数据长度为0字节。

Win 4096 :窗口大小为4096字节

<Mss 1024>:协商的最大报文长度为1024字节

注:如果tcpdump不加-s的话,则除了SYN会打印完整的序号,后续序号输出为相对ISN的偏移量。

连接建立过程

TCP/IP详解 笔记十四

TCP/IP详解 笔记十四

连接的终止过程

TCP/IP详解 笔记十四

与程序状态相关

TCP/IP详解 笔记十四

  1. 客户端应用程序退出,导致其TCP发送FIN并携带FIN序号。
  2. 服务端TCP收到FIN发送ACK,并向应用程序发送文件结束符EOF
  3. 应用程序收到结束符后,关闭其连接,导致TCP发送FIN。
  4. 客户端确认FIN。

注:

  1. 连接建立和终止发起者总数主动打开或关闭,而对端被动打开或关闭。
  2. 建立连接需三次握手,而终止却需要四次,这是由TCP的半关闭造成的。

超时机制

1.500ms的计算器

2.第一次超时为6s,第二次超时为24s

最大报文长度

1.MSS :TCP传到对端最大数据长度(不包括TCP首部长度)

2.双方都通过期望的MSS值,如果一方不同意另一方的则MSS定为默认值536字节

3.MSS选项只能出现在SYN报文段中

4.TCP双方不在同一网络,则一般使用536作为报文最大长度。

5.报文长度应小于路径MTU,避免分段

半关闭状态

1.半关闭:TCP连接的一端在结束它的发送后,还能收到对端数据。

2.实现方法:关闭时使用shutdown ,且第二个参数值设为1,而不使用close.

3.序列图:

TCP/IP详解 笔记十四

TCP协议的状态变迁图

TCP/IP详解 笔记十四

注意:

  1. 只有SYN_RCVD是从LISTEN状态进入时,从SYN_RCVD回到LISTEN状态才是有效的。
  2. 两个进入ESTABLISHED对应于打开连接,两个离开ESTABLISHED对应于关闭连接。

连接打开和关闭的流程

TCP/IP详解 笔记十四

2MSL等待时间

1.MSL最大报文段生存时间,而TIME_WAIT状态时2被MSL时长,又称为2MSL等待时间,这可以防止最后的ACK丢失。

2.MSL受IP报文生存时间限制。

3.处于2MSL的插口不可再被使用。

4.某些试图可以通过声明SO_REUSEADDR选项,可以使用处于2MSL的插口,但TCP的原则是不允许的。

5.处于2MSL状态的插口收到迟到的数据包会直接丢弃。因为,这些数据包会被新连接误解。

6.2MSL的时间一般在1~4分钟。

平静时间

RFC793指出,TCP重启后MSL秒内不能建立任何连接,避免重用(重启ISN回归初始值)重启前处于2MSL的端口,防止迟到的报文段被新连接误解。

FIN_WAIT_2状态

发FIN,并收到确认的状态。可能出现无限等待情况,对端收到FIN发确认(CLOSE_WAIT)但应用程序并不关闭(不发送FIN)。一些实现通过计时器避免该问题发生,但都不符合协议规范。

复位报文

TCP/IP详解 笔记十四

 访问不到的端口报文

UDP在这种情况下发送ICMP差错报文,TCP使用复位报文。

Eg.

TCP/IP详解 笔记十四

 异常终止一个连接

1.通过发送复位报文,异常终止一个连接。收到RST报文段的一方将终止连接,并通知应用层连接复位。

2.异常终止的好处:1.丢弃任何待发送数据立即发送复位报文段(FIN会等到所有排队数据发送完成),2.RST的接收方会区分另一端执行的是正常还是异常关闭。

3.可以通过设置sock选择SO_LINGER实现异常关闭。

检查半打开连接

1.半打开连接:一方已经关闭或异常终止(网络断线)而另一方还不知道。

2.只要不在半打开连接上传输数据,仍处于连接状态的一方不会检测到另一方已经出现异常。

3.当连接另一方重置后,对收到的报文段回复RST。

4.使用TCP的keepalive能使TCP的一端发现另一端已经取消。

同时打开

TCP/IP详解 笔记十四

同时关闭

TCP/IP详解 笔记十四

TCP的选项

TCP/IP详解 笔记十四

其中无操作(kind=1)的选项用于填充,将其他选项填充到4字节边界。

服务器设计

呼入连接请求队列

1.正等待连接请求的一端,有个存放完成三次握手但未被应用程序接受的固定长度队列。TCP接受一个连接是将其放入这个队列,应用层接受该连接是从该队列将其移出。

2.应用层将指明该队列的最大长度(listen),这个值通常称为积压值(backlog),取值范围为0-5

3.当一个连接请求(SYN报文段)进来时,TCP根据当前队列存在的连接数和积压值,来确定是否接受该连接,solaris接受的最大连接数等于积压值,而传统BSD最大连接数等于,积压值*3/2+1。注意:积压值说明的是被TCP接受但未被应用层接受的最大连接数,这个积压值与系统所允许的最大连接数,或者并发服务器能并发处理的客户数,并无影响。

4.处于该队列的连接(完成3次握手但未被应用程序接受),对应的客户端认为建立连接完成,并开始传送数据,此时TCP服务端将数据放到缓存中。

5.如果队列没有空间,则不理会新到的SYN报文段(新建连接),也不发送任何报文段。

TCP/IP详解 笔记十四的更多相关文章

  1. TCP&sol;IP详解 笔记十二

    简单文件传送协议 TFTP 1)         初衷是为了引导无盘系统 2)         使用UDP 3)         代码都能适合只读存储器 无盘主机通过RARP获得ip地址后进行一个TF ...

  2. TCP&sol;IP详解 笔记十

    IGMP Internet组管理协议 IGMP的作用:让一个物理网络上的所有系统知道主机所在的多播组: 让路由器知道多播数据报应该向哪个端口转发. IGMP有固定长度,没有可选数据,在ip头部的协议值 ...

  3. TCP&sol;IP详解 笔记一

    概述: Tcp-ip让网络上的计算机进行通信,而不管计算机和操作系统是否一样. 分层结构: Tcp/ip协议族是多层协议的组合,而tcp和ip只是其中的两个协议而已. 一个通信举例: 注意图的右上方: ...

  4. TCP&sol;IP详解 笔记十三

    TCP协议(一) 概述 特点 1,  面向连接可靠的字节流服务 2,  只有两方通信,不能用于广播或多播 3,  应用数据被TCP分隔为最合适发送的数据段,传给IP协议栈 4,  发送端并启动定时器, ...

  5. TCP&sol;IP详解 笔记十一

    域名服务系统(DNS) DNS:名字到IP转换:电子邮件选路信息:分布式数据库 解析器:是通过gethostbyname(3)和gethostbyaddr(3)来实现的 最常用的名字服务器是BIND ...

  6. TCP&sol;IP详解 笔记九

    广播和多播 多播和广播只能用于UDP包,TCP明确在两个进程间建立连接. 多播:帧只传送给属于多播组的多个接口 主机对帧的过滤过程: 通常网卡只接收那些目的地址为本物理接口地址或广播地址的帧:设置为混 ...

  7. TCP&sol;IP详解 笔记八

    UDP协议 UDP是传输层协议,提供无连接不可靠的数据传输,其优点失效率高,确定确定是无序不可靠. 报文格式 UDP头部 TCP和UDP的端口号是独立的 UDP长度是指UDP数据报的总长度 UDP的校 ...

  8. TCP&sol;IP 详解笔记

    最早的 TCP 协议文档是 RFC793. TCP 提供一种面向连接的.可靠的字节流服务. 面向连接容易理解,那么什么是字节流服务呢? 答:两个应用程序通过 TCP 连接交换 8 bit 字节构成的字 ...

  9. TCP&sol;IP详解学习笔记 这位仁兄写得太好了

      TCP/IP详解学习笔记(1)-基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣 ...

随机推荐

  1. LINQ to SQL语句&lpar;5&rpar;之Order By

    适用场景:对查询出的语句进行排序,比如按时间排序等等. 说明:按指定表达式对集合排序:延迟,:按指定表达式对集合排序:延迟,默认是升序,加上descending表示降序,对应的扩展方法是OrderBy ...

  2. NOI2005维修数列 splay

    好题,错了不知道多少遍.这题其他几个操作都是比较经典的,多了一个最大子序列的.这时候对于当前的区间,最大子序列,可能使左区间的最值,可能是右区间的最值,也可能是整个区间的.所以维护lx[],rx[], ...

  3. 【leetcode】Subsets II

    Subsets II Given a collection of integers that might contain duplicates, S, return all possible subs ...

  4. &lbrack;HTTP那些事&rsqb; JSON数据

    随着Android的发展,各路大神的贡献,我们可用的*越来越多.比如HTTP请求框架,有自家的Volley,Square的okhttp, async-http-lib, 还有聚合版的xUtils以及 ...

  5. ARP侦查工具Netdiscover

    ARP侦查工具Netdiscover Netdiscover是一个主动/被动的ARP侦查工具.该工具在不使用DHCP的无线网络上非常有用.使用Netdiscover工具可以在网络上扫描IP地址,ARP ...

  6. 关于导入oracle10g的数据到sqlserver2005里的方案总结

    由于项目需求,现需要将oracle的数据全部导入到sqlserver中,一下算是自己的总结小计吧. sqlserver有自己的导入数据的功能,其中就有提供两种方式从oracle导入数据. 两种方式就不 ...

  7. Mysql笔记之 -- replace&lpar;&rpar;实现mysql 替换字符串

    mysql 替换函数replace()实现mysql 替换字符串 mysql 替换字符串的实现方法:  mysql中replace函数直接替换mysql数据库中某字段中的特定字符串,不再需要自己写函数 ...

  8. ElasticSearch快速指南

    ElasticSearch是基于Apache Lucene的分布式搜索引擎, 提供面向文档的搜索服务. 安装ElasticSearch 文档 创建文档 访问文档 更新文档 删除文档 索引 分析器 类型 ...

  9. 安卓开发学习笔记(一):如何用Android Stuidio导出apk文件?

    一,首先,我们在菜单栏上找到这一栏: 然后点击build,再点击generate apk,然后出现以下界面: 由于之前我们并没有进行apk文件的生成,因此需要这个apk key做一个验证,以防您的ap ...

  10. java 运算符的优先级比较

    口诀:淡云一笔安洛三福 单目>算数运算符>移位>比较>按位>逻辑>三目>赋值 单目运算符:+,-,++,-- 算数运算符:+,-,*,/,% 移位运算符:&l ...