第一篇 TCP/IP协议详解


前言

Linux高性能服务器编程 第一章学习笔记


一 TCP/IP协议族

1.1 ARP协议

ARP协议可以实现任意网络层地址到任意物理地址的转换,最常见的是IP到MAC地址转换。工作原理是广播ARP请求,接收者检查IP相同返回单播的ARP应答。
ARP帧格式如下:

硬件类型	协议类型	硬件地址长度	协议地址长度	操作 发送端以太网地址	发送端IP 目的端以太网地址 目的端IP地址
   2       2        1           1        2         6           4           6             4       字节

由于可以转换任意地址,因此需要指定地址类型(MAC为1,IP为0x800);然后确定地址长度(IPV4为4,MAC为6),操作分为请求(1)、应答(1),RARP请求(3)、RARP应答(4);最后是地址。
合计长度为28字节,加上以太网头部18字节,合计46字节,如果需要满足最小长度会填充至64字节。

1.2 DNS协议

域名转换为IP地址有多种方式,例如NIS、DNS和本地静态文件
DNS是一套分布式的域名服务系统,每个DNS服务器存放着大量域名和IP地址的映射,并且可以动态更新,支持IP和域名互相转换。

标识	标志	问题个数	应答资源个数	授权资源个数	额外资源个数    四种资源长度可变
 2       2        2         2			2			2      	   字节	

标识用于标记一对DNS查询和应答;
标志用于协商具体通信方式和状态,包括请求/应答(QR)、类型(opcode)、是否截断、递归/迭代、允许递归、应答状态等。
后四个字段对应资源的长度,之后是真正的资源,同样需要按照格式进行封装。

二、IP协议详解

2.1 IP服务的特点

无状态:通信双方不同步传输数据的状态信息
无连接:通信双方不长久维持对方信息,每次通信必须指定接收方
不可靠:不保证数据报准确地到达接收端
因此,超时重传、数据确认等机制由更上层协议实现

2.2 IPV4头部结构

在这里插入图片描述
版本:IPV4为4
首部长度:单位是4字节,通常值为5,代表20字节,最大为15,代表60字节
服务类型:控制该数据包需求,用四位来代表最小延时、最大吞吐量、最高可靠性和最小费用,只能选1位设置为1。
总长度:最大为65535字节,由于MTU限制,通常达不到最大长度
标识:唯一标识数据报,分片的标识相同
标志:第二位DF禁止分片,第三位MF更多分片,最后一片为0
片偏移:单位是8字节,除了最后一片,每片必须是8的倍数
生存时间:TTL,通常为64
协议:上层协议,ICMP为1,TCP为6,UDP为17
校验和:仅校验头部
可选部分:记录路由、时间戳、松散路由选择(必须经过所有路由)、严格源路由(只能经过指定路由)

2.3 IP路由

IP输入队列——>IP模块CRC校验——>判断IP是否是本机IP或者广播—不是—>数据报转发子模块——>是否允许转发—是—>IP数据包输出子模块——>IP输出队列

2.4 重定向

ICMP协议虽然使用IP协议,但是仍然处于网络层。
ICMP报文的前四个字节是统一的格式,共有三个字段,即类型、代码、检验和,接着的四个字节取决于ICMP报文的类型,然后是数据部分,长度也取决于类型。
在这里插入图片描述
类型:
3——终点不可达
4——源点抑制(Source Quench)
5——改变路由(Redirect)
11——超时
12——参数问题
代码:根据类型,通常是对情况的说明,主机重定向代码为1
校验和:校验整个数据报
重定向时需要说明引起重定向的IP数据报的源IP地址以及应该使用的路由器的IP地址,接收主机据此就可以更新路由表缓冲

2.5 IPV6头部

在这里插入图片描述
流标签:用于音视频等实时数据传输
净荷长度:扩展头部和数据长度之和
下一个包头:固定头部后的包头类型,类似IPV4中的协议字段

三、TCP协议详解

TCP服务的特点:面向连接、字节流和可靠传输

3.1 TCP头部结构

在这里插入图片描述
URG:紧急指针是否有效
ACK:确认号是否有效,携带ACK为确认报文段
PSH:提示接收端立即从TCP缓冲区读走数据
RST:要求对方重新建立连接,携带RST为复位报文段
SYN:请求建立简介,携带SYN为同步报文段
FIN:结束报文段
检验和校验头部和数据,保证可靠传输

3.2 TCP连接的建立和关闭

(1)三次握手
第一次握手是A建立连接发送的A的同步报文段,只有seq号,没有ack号
第二次握手是B建立连接同时回复确认发送的B的同步、确认报文段,seq号,ack号为A的seq号+1。
第三次握手是A回复确认发送的A的确认报文段,seq号为上次的seq号+1,ack号为B的seq号+1。该报文段可以携带数据。
序列号是标识TCP数据流中的每一字节的,不过同步报文段虽然不含数据,同样占用一个序号值。

第一次握手之后没有收到确认会多次重复发送同步报文段,直到达到最大发送次数。
(2)四次挥手
第一次挥手是A断开连接发送的A的结束报文段,seq号同样占用一个
第二次挥手是B回复确认报文段,ack为A的seq+1
第三次挥手是B断开连接发送的结束报文段
第四次挥手是A回复确认报文段
由于TCP是全双工连接,因此允许A断开之后继续接收来自B的消息,直到B发送结束报文段,此中间状态叫做半关闭状态。

(3) TIME_WAIT状态
指的是A在断开与B的连接并收到来自B的结束报文段后,到完全关闭接收来自B消息的时间,通常为2*MSL,建议值2min。
该状态的目的是:
1、可靠地终止TCP连接,因为回复的确认报文段可能丢失,再次收到来自B的结束报文段可以再次回复确认。
2、保证让迟来的TCP报文段有足够的时间被识别并丢弃。因为TCP端口不能被同时打开多次,如果不存在该状态,在结束一次TCP之后重新建立相似连接,可能会接收到上一次连接中迟到的报文段。通过等待2MSL,保证迟到的TCP报文段都被丢弃。
因此,当程序退出后,通常不能立即重启。可以通过选项设置强制重启。

3.3 复位报文段

产生复位有三种情况:
(1)访问不存在的端口或处于TIME_WAIT状态的端口
RST位置1,窗口大小设为0,发送方不需要接收该回复报文段
(2)异常终止连接
一方给另一方发送复位报文段,另一方等待发送的数据都将被丢弃
(3)处理半打开状态

3.4 TCP数据传输

有两种类型:交互数据和成块数据。
交互数据强调实时性,服务器端在回复确认的同时将需要交互的数据发送给客户端;客户端等待确认的同时收集本端需要发送的数据。Nagle算法要求一个TCP连接的通信双方在任意时刻最多只能发送一个未确认的TCP报文段。
成块数据强调效率,服务器发送多个TCP报文段,客户端可以对最后接收的报文段进行确认,并通过窗口控制流量。

3.5 拥塞控制

慢启动、拥塞避免、快速重传和快速恢复
核心是合理选择发送窗口(SWND)的大小,该值由接收窗口(RWND)和拥塞窗口(CWND)的较小值决定。
慢启动:
每收到一个ack,CWND增加1。表现为CWND每过一个轮次就翻倍,直到超过阈值,进入拥塞避免阶段。
拥塞避免:
每收到一个ack,CWND增加1/CWND。表现为每一轮次CWND加1,直到超时再次进入慢启动(CWND变为1),或者三次收到同一ack的报文进入快速重传
快速重传:
收到三个相同的ACK报文后,立即重传丢失的报文段,并要求接收方立即回复,CWND缩小为原来的1/2,阈值设置为CWND。由于缺失被补充,因此接收方返回的确认可能是对之前发送的更后的ACK确认,进入快恢复阶段。
快恢复:
CWND从阈值处开始拥塞避免
在这里插入图片描述

四、TCP/IP案例:访问Internet上的Web服务器

4.1 代理服务器

分为正向代理、反向代理和透明代理
正向代理:客户端自己设置代理服务器的地址,客户端的请求被直接发到代理服务器,并由代理服务器来请求目标资源。
反向代理:服务器端设置,接收连接请求,然后转发到内部网络的服务器,并将结果返回给客户。
透明代理:在网关上设置正向代理,对客户端是透明的。


总结

对基本协议进行介绍,通过一个案例了解端口通信过程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值