TCP/IP协议学习

TCP/IP协议

dfd3b565847d4f0a86d0665a6d8e5b78.png

一、网络层

1.地址解析协议ARP

IP地址(32)

IP地址::={<网络号>,<主机号>}

地址分类

net-id+host-id长度(字节)

范围

A类

1+3

1.0.0.0-126.255.255.255

B类

2+2

128.0.0.0-191.255.255.255

C类

3+1

192.0.0.0~223.255.255.255

回环地址:127.x.x.x,被保留

有限广播地址:255.255.255.255,仅在本地网络上进行广播

直接广播地址:net-id是有效的网络号,而host-id是全1。在net-id指明的网络上的所有主机进行广播。

IP地址和MAC地址

IP地址是网络层及以上各层所使用的地址;MAC地址是物理层和数据链路层所使用的地址

ARP高速缓存(ARP cache)中有一个IP地址到硬件地址的映射表

报文格式

arp报文共42bytes:以太网首部14bytes,ARP字段28bytes

以太网首部如下表,单位为bytes:

ether_dhost

ether_shost

ether_type

6

6

2

以太网目的地址Destination

以太网源地址Source

以太网帧类型:ARP为0x0806

ARP首部如下表,单位为bytes:

ar_hrd

ar_pro

ar_hln

ar_pln

ar_op

2

2

1

1

2

硬件类型Harware type:以太网为1

协议类型Protocol:IPv4为0x0800

硬件地址长度:ARP中其值为6,单位为字节

协议地址长度:ARP中其值为4,单位为字节

操作类型:该报文类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4

ARP载荷如下表,单位为bytes:

arp_sha

arp_spa

arp_tha

arp_tpa

6

4

6

4

发送方MAC地址

发送方IP地址

目的MAC地址

目的IP地址

工作流程

主机A向同一局域网下的主机B发送IP数据报

查表,有无主机B的IP地址:

若有,则根据IP地址在映射表中查出对应硬件地址,并将硬件地址写入MAC帧。

若无,则主机A就自动运行ARP:

  1. ARP进程在局域网广播一个ARP请求分组。
  1. 本局域网上的所有主机运行的ARP进程收到这个ARP请求分组。
  1. 主机B的IP地址与ARP请求分组中要查询的IP地址一致,收下ARP请求分组,并向主机A发送写入主机B硬件地址的ARP响应分组,其他主机不响应。
  1. 主机A收到主机B的响应分组,就在主机A的高速缓存中写入主机B的IP地址到硬件地址的映射

1)主机A发送请求(广播)

广播帧

以太网首部的目的地址为广播帧特定MAC地址:FF:FF:FF:FF:FF:FF,源地址为主机A的MAC地址。

ARP请求中,op字段为1,ARP请求报文的发送方MAC地址为主机A的MAC地址,发送方IP地址为主机A的IP地址;目的MAC地址一般为00:00:00:00:00:00(没有特别设置ar$tha的值(设置为全0),因为它正试图确定这个值),目的IP地址为主机B的IP地址。

f18e4213a7394fbfa15ed66332a8c37f.png

2)主机B响应请求(单播)

单播帧

以太网首部的目的地址为主机A的MAC地址,源地址为主机B的MAC地址。

ARP回应中,op字段为2,ARP响应报文的发送方MAC地址为主机B的MAC地址,发送方IP地址为主机B的IP地址;目的MAC地址为主机A的MAC地址,目的IP地址为主机A的IP地址。

免费ARPGratuitous ARP

免费ARP包的目的IP地址为自己的IP地址,免费ARP不期望收到回应

作用:

(1)宣告,告诉其他主机自己的IP地址和MAC地址。如果主机改变了硬件地址,发送免费ARP可以更新其他主机的ARP缓存表。

(2)检测冲突,确认另一个主机是否设置了相同的IP地址。如果收到了一个回答,终端日志产生一个错误信息。

2.网络协议IP

IP数据报格式

IP首部的固定部分格式如下表,单位为bit:

版本

首部长度

区分服务

总长度

4

4

8

16

标识

标志

片偏移

16

3

13

生存时间

协议类型

首部校验和

8

8

16

源地址

目的地址

32

32

版本:IP协议的版本,IPv4为4,IPv6为6。

首部长度:IP首部的固定部分的长度为20字节,4字节为单位,所以首部长度的最小值为5,最大值为15(即60字节)。

区分服务:PPP:3位,定义包的优先级,取值越大数据越重要。

D:低时延

T:高吞吐

R:高可靠

M:低成本

0:恒为0

总长度:首部和数据的长度之和。数据链路层规定了一个数据帧中的数据字段的最大长度,即最大传送单元MTU,例如常用以太网规定MTU值为1500,数据报大于MTU,则必须对数据报进分片。

标识:同一数据报的分片具有相同的标识字段,使分片后的各数据报能够正确重组。

标志:3位;

最低位MF(More Flagment),MF=1表示还有分片,MF=0表示最后一个分片

中间位DF(Don't Flagment),DF=1表示不能分片,DF=0表示可以分片

最高位保留

片偏移(Flagment Offset):某片相对于用户数据字段的位置,8字节为单位

生存时间:TTL,路由器每转发一次数据报,TTL值减1,减为0丢弃数据报。分片过程如下图

37dac30f0cf04efca3803c5582953357.png

协议:报文的数据段所使用的协议类型

几种常用协议号如下表:

ICMP

IGMP

IP

TCP

UDP

IPv6

1

2

4

6

17

41

首部校验和:只校验数据报的首部,首部分成16位一组,反码求和,结果取反码

源地址:发送方IP地址

目的地址:目的IP地址

cebd5a99ed254ae195cd4c40b93f81d3.png

IP首部的可变部分如下表,单位为bit:

可选字段

填充

1~40字节不等

可选字段:增加IP数据报的功能。

Type

Length

Description

0

-

End of option list

1

-

No operation

130

11

Security

131

Loose Source Routing

137

Strict Source Routing

7

Record Route

136

4

Stream ID

68

Internet Timestamp

填充:首部长度不是4字节的整数倍,利用填充字段进行填充。

分片和重组

1)分片

源主机会根据数据链路层的MTU值判断数据报是否进行分片,分片后的格式不变。首部与原数据报相同,但标志和片偏移字段会进行相应修改。数据段则为原数据段的一个连续部分。

2)重组

目的主机收到分片后,对各分片进行组装。根据标识确定分片属于哪个IP数据报,根据标志MF子字段确定是否为最后一个分片,根据片偏移字段确定分片在原数据报中的位置。

转发分组流程

路由表(目的网络地址,下一跳地址)

分组转发算法如下:

(1)从数据报的首部提取目的主机的IP地址D得出目的网络地址为N

(2)若N就是与此路由器直接相连的某个网络地址,则直接交付;否则间接交付,执行(3)。

(3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。

(4)若路由表中有到达网络N的路由,则把数据报传送给路由表中指明的下一跳路由器;否则,执行(5)。

(5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。

(6)报告转发分组出错

子网划分

从网络的主机号借用若干位作为子网号

三级IP地址::={<网络号>,<子网号>,<主机号>}

如何确定一个网络是否划分子网——子网掩码

子网掩码和IP地址进行逐位的“与”(AND)运算

如果一个网络不划分子网,那么该网络的子网掩码就使用默认子网掩码。

A类 255.0.0.0

B类 255.255.0.0

C类 255.255.255.0

使用子网时分组的转发

路由表:目的网络地址、子网掩码和下一跳地址。

(1)从收到的数据报的首部提取目的IP地址D。

(2)先判断是否为直接交付。对路由器直接相连的网络地址逐个进行检查;用各网络的子网掩码和D逐位相“与”(AND操作),看结果是否和相应的网络地址匹配。若匹配,则把分组进行直接交付。否则就是间接交付,执行(3)。

(3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由表;否则,执行(4).

(4)对路由表中的每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码和D逐位相“与”(AND操作),其结果为N。若N与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则,执行(5)。

(5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。

(6)报告转发分组出错

3.网络控制报文协议ICMP

ICMP报文装在IP数据报的数据部分

ICMP报文格式如下表,单位为bytes:

类型

代码

校验和

1

1

2

首部其他部分

4

ICMP的数据部分

ICMP报文的种类有两种,即ICMP差错报文和ICMP询问报文

几种常用的ICMP报文类型如下表:

ICMP报文种类

类型值

ICMP报文的类型

代码

差错报告报文

3

终点不可达

0~15(常用0~4)

4

源站抑制

0

5

改变路由

11

时间超过

0,TTL超时

1,分片重组超时

12

参数问题

询问报文

8或0

回显请求或者应答

0

10或9

路由询问或通告

0

13或14

时间戳请求或者应答

0

15或16

信息请求或应答

17或18

地址掩码请求或应答

0

终点不可达:

代码为0,网络不可达

代码为1,主机不可达

代码为2,协议不可达

代码为3,端口不可达

代码为4,需要分片的数据包,但DF为1

差错报文

差错报文格式:

ICMP的前8字节

IP数据报首部

IP数据报的数据字段的前8字节

IP数据报的数据字段的前8字节对应上层协议首部的前8字节。(运输层的端口号以及运输层的发送序号)

询问报文

1)回送请求和回答

这种询问报文用来测试目的站是否可达以及了解其有关状况。

主机或路由器向目的主机发出回送请求报文

收到回送请求报文的主机给源主机或路由器发送ICMP回送回答报文

2)时间戳请求和回答

请某主机或路由器回答当前的日期和时间。

不产生ICMP差错报文的几种情况:

1.ICMP差错报文

2.不是IP分片的第1片

3.目的IP为广播地址或多播地址的IP数据报

4.源地址不是单个主机的数据报,即零地址、环回地址、广播地址或多播地址

应用举例:PING

分组网间探测PING,测试两台主机之间的连通性

二、传输层

1.协议端口号

16位端口号

1)服务器端使用的端口号

熟知端口号(系统端口号),数值为0~1023

FTP

TELNET

SMTP

DNS

TFTP

HTTP

SNMP

SNMP(trap)

HTTPS

21

23

25

53

69

80

161

162

443

登记端口号,数值为1024~49151

2)客户端使用的端口号

仅在客户进程运行时才动态选择,又叫短暂端口号,数值为49152~65535

2.TCP

套接字socket=(IP地址:端口号)

TCP连接::={socket1,socket2}={(IP1:port1),(IP2:port2)}

报文格式

源端口

目的端口

2

2

序号

4

确认号

4

首部长度

保留

6位标志

窗口

4bit

6bit

6bit

2

校验和

紧急指针

2

2

选项

0~40

6位标志:

(1)URG:URG=1,紧急指针字段有效,有紧急数据

(2)ACK:ACK=1,确认号字段有效,连接建立后所有传送的报文段都必须把ACK置1。

(3)PSH:接收方收到PSH=1的报文段,就尽快交付接收应用进程。

(4)RST:RST=1,表明TCP连接出现严重差错,必须释放连接,然后再重新建立连接;或者拒绝打开一个连接。

(5)SYN:连接建立时用来同步信号。SYN置为1,表示这是一个连接请求或者连接接受报文。

(6)FIN:释放一个连接。FIN=1,表明此报文的发送方的数据已发送完毕,并要求释放连接。

选项(option):

Kind

Length

Info

1

1

n

描述

kind(1字节)

Length(1字节)

EOP

0

NOP

1

MSS(2字节)

2

4

MSS值

窗口扩大(1字节)

3

3

0~14

选择确认

4

2

-

SACK

5

2+N*8

左边沿\右边沿

时间戳(4+4)

8

10

timestamp+timestamp echo

填充

9b731eb9595a477fae9ac23ae363b8d3.png

2632a1351afb447e9c3e0dc2d780d322.png

停止等待协议

每发送完一个分组就停止发送,等待对方的确认,收到确认后发送下一个分组。

超时重传后,接收方的动作:

        1.差错报文

                发送方超时重传后,接收方接收报文并发送确认。

        2.确认丢失

                发送方超时重传后,接收方丢弃重复分组并发送确认。

        3.确认迟到

                发送方超时重传后,接收方丢弃重复分组并发送确认;发送方收到迟到的确认,但什么也不做。

连续ARQ协议

以字节为单位,TCP是基于字节流的传输协议

发送方:连续发送,将发送窗口内的分组连续发送出去

确认方:累积确认,对按序到达的最后一个分组发送确认

确认丢失,窗口回退

超时重传Karn

超时重传时间RTO

报文最大生存时间MSL

往返时间RTT

加权平均往返时间RTTs

新的RTTs=(1 - α)*旧的RTTs + α*(新的RTT样本)

指数退避:RTO新 =RTO旧*2

RTO的上限为2*MSL

选择确认SACK

收到无序段

首部选项中增加1字节的SACK类型字段、1字节的选项长度、字节块的边界序号

流量控制Nagle

发送窗口控制:发送方的发送窗口不能超过接收方给出的接收窗口的数值

零窗口探测:接收方发送了零窗口的报文段,即此时接收方不能再接收数据了。此时,发送方启动持续计时器,时间到期,就发送一个零窗口探测报文段

最大报文长度MSS

Nagle:

  1. 收到对前一个报文段的确认才发送下一个报文段
  2. 缓存待发送的数据,直到数据达到MSS或者发送窗口的一半大小时,立即发送1个报文段。

三报文握手(建立连接)

ca78263e4a4041fe9ff3cfee47159e78.png

584c4219c8fc455fbb5009c9ca0fc637.png

客户端

服务器端

IP地址

172.100.10.237

180.163.222.164

端口

51808

80

初始状态

CLOSED

CLOSED

首先服务器端进入LISTEN状态

(1)第一次报文传输:客户端->服务器端,连接请求,SYN=1,ACK=0,seq=x

客户端发送报文后进入SYN-SENT状态

服务器端收到报文后进入SYN-RCVD状态

(2)第二次报文传输:服务器端->客户端,确认,SYN=1,ACK=1,seq=y,ack=x+1

客户端收到报文后进入ESTABLISHED状态

(3)第三次报文传输:客户端->服务器端,确认,SYN=0,ACK=1,seq=x+1,ack=y+1

服务器段收到报文后进入ESTABLISHED状态

四报文挥手(释放连接)

608dbd01949545c386c931725c172bc7.png

e8715407bd594f61a5591ea83dd719a1.png

客户端

服务器端

IP地址

180.163.222.164

172.100.10.237

端口

80

51810

初始状态

ESTABLISHED

ESTABLISHED

(1)第一次报文传输:客户端->服务器端,连接释放请求,FIN=1,ACK=0,seq=u

客户端发送报文后进入FIN-WAIT-1状态

服务器端收到报文后进入CLOSE-WAIT状态

(2)第二次报文传输:服务器端->客户端,确认,FIN=0,ACK=1,seq=v,ack=u+1

客户端收到报文后进入FIN-WAIT-2状态

这时,TCP连接处于半关闭状态,即客户端到服务器端的连接关闭,服务器端到客户端的连接未关闭

(3)第三次报文传输:服务器端->客户端,连接释放,FIN=1,ACK=1,seq=w,ack=u+1

服务器端发送报文后进入LAST-ACK状态

客户端收到报文后进入TIME-WAIT状态

(4)第四次报文传输:客户端->服务器端,确认,FIN=0,ACK=1,seq=u+1,ack=w+1

服务器端收到报文后进入CLOSED状态

最后客户端等待2MSL最长报文段寿命的时间后进入CLOSED状态

RST字段

异常关闭连接意义

可直接丢弃缓存区的数据,快速释放连接。

产生RST的条件

  1. 未对外提供服务的端口。客户端发送SYN连接请求后,服务器端发现不存在该端口(客户端的目的端口),服务器端发送一个RST,中断连接请求。
  2. 客户端和服务器的某一方在交互过程中发现异常,该方发送RST。
  3. 一个已关闭的TCP连接收到TCP报文,发送RST。
  4. 长期未收到来自对方的确认报文,即超过一定重传次数或时间,发送RST。

有限状态机

c5638f00d0714e08998a59616fc1d1a0.png

adceae69215d4d21b5850f672419fbe3.jpeg

服务器端有数据要发给客户端时,就会发送一个SYN报文给客户端,此时,服务器端的LISTEN状态就会转变为SYN-SENT状态;客户端的SYN-SENT状态就会转变为SYN-RCVD状态。双方的角色发生转变。

ebcd8df4897446e08ff0bceed343de22.jpeg

(1)主动方发送FIN请求关闭连接,这个FIN还没到被动方,被动方恰好也想主动关闭TCP连接,给主动方发送FIN,主动方收到FIN后回复ACK,进入CLOSING,被动方收到FIN后回复ACK,主动方收到ACK后,进入TIME_WAIT。

(2)主动方发送FIN请求关闭连接,被动方接收到后,发现自己没有数据要发送,就把ACK和FIN放在一起发出,主动方收到后,直接进入TIME_WAIT。

1.CLOSED状态

处于CLOSED状态时收到报文,必须发送RST响应。

无RST标志,无ACK标志时,发送零序列号的报文。

无RST标志,有ACK标志是,发送序列号为ack的报文。

处于CLOSED状态的TCP在应用层的“active OPEN”请求下,必须发送SYN报文

2.SYN-SENT状态

处于SYN-SENT状态时收到<SYN,ACK>报文,建立连接,进入ESTABLISHED状态。

3.UDP

首部格式

源端口

目的端口

长度

校验和

2

2

2

2

长度:UDP用户数据报的长度,最小值为8(仅有首部)

校验和:计算校验和,要在UDP用户数据报之前增加12个字节的伪首部。

伪首部格式:

源IP地址

目的IP地址

全0

17

UDP长度

4

4

1

1

2

34a59153c34548258ff8bc4060a7d781.png

TCPUDP对比

TCP

UDP

面向连接

无连接

可靠交付

尽最大努力交付

一对一

一对一、一对多

多对一、多对多

全双工通信

面向字节流

面向报文

三、应用层

  1. DHCP协议

DHCP(Dynamic Host Configuration Protocol)动态主机配置协议是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下,DHCP作为Windows Server的一个服务组件不会被系统自动安装,还需要管理员手动安装并进行必要的配置。

三种分配IP地址的机制

1) 自动分配方式(Automatic Allocation),DHCP服务器为主机指定一个永久性的IP地址,一旦DHCP客户端第一次成功从DHCP服务器端租用到IP地址后,就可以永久性的使用该地址。

2) 动态分配方式(Dynamic Allocation),DHCP服务器给主机指定一个具有时间限制的IP地址,时间到期或主机明确表示放弃该地址时,该地址可以被其他主机使用。

3) 手工分配方式(Manual Allocation),客户端的IP地址是由网络管理员指定的,DHCP服务器只是将指定的IP地址告诉客户端主机。

三种地址分配方式中,只有动态分配可以重复使用客户端不再需要的地址。

工作原理

DHCP协议采用UDP作为传输协议,主机发送请求消息到DHCP服务器的67号端口,DHCP服务器回应应答消息给主机的68号端口。

a657b842507141db958a3b096ac46a6d.jpeg

5efe77e82ff1420eb205e612d500ac4c.png

DHCP获得 ip 地址的 4 步骤:discover­>offer­>request­>ack(nak)

DHCP刷新租期的步骤:request­>ack(nak)

DHCP释放 ip 的步骤:release

续租:

在使用租期超过50%时刻处,DHCP Client会以单播形式向DHCP Server发送DHCPRequest报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址。

在使用租期超过87.5%时刻处,DHCP Client会以广播形式向DHCP Server发送DHCPRequest报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址,直到IP地址使用租期到期时,DHCP Client才会向DHCP Server发送DHCP Release报文来释放这个IP地址,并开始新的IP地址申请过程。

报文格式

3c26ca5b95fe4b29beb6d7bb1f7f53a4.png

op:报文类型,1表示请求报文,2表示回应报文.

htype:硬件类别,Ethernet为1.

hlen:硬件地址长度,Ethernet为6.

hops:DHCP报文经过的DHCP中继的数目,默认为0。DHCP请求报文每经过一个DHCP中继,该字段就会增加1。没有经过DHCP中继时值为0。

xid:TRANSACTION ID,客户端选择的一个随机数,用于匹配DHCP 请求和应答。

secs:由客户端填写,DHCP客户端从获取到IP地址或者续约过程开始到现在所消耗的时间,以秒为单位。在没有获得IP地址前该字段始终为0。

flags:B为广播标记,0表示单播,1表示广播,其余保留。

dde44b800fdf452b847d210d42eb978f.png

ciaddr:DHCP客户端的IP地址。仅在DHCP服务器发送的ACK报文中显示,在其他报文中均显示0。

yiaddr:DHCP服务器分配给客户端的IP地址。仅在DHCP服务器发送的Offer和ACK报文中显示,其他报文中显示为0。

siaddr:下一个为DHCP客户端分配IP地址等信息的DHCP服务器IP地址。仅在DHCP Offer、DHCP ACK报文中显示,其他报文中显示为0。

giaddr:DHCP客户端发出请求报文后经过的第一个DHCP中继的IP地址。如果没有经过DHCP中继, 则显示为0。

chaddr:client hardware address DHCP客户端硬件地址

sname:为DHCP客户端分配IP地址的DHCP服务器名称(DNS域名格式),以0x00结尾。在Offer和ACK报文中显示发送报文的DHCP服务器名称,其他报文显示为0。

File:DHCP服务器为DHCP客户端指定的启动配置文件名称及路径信息。仅在DHCP Offer报文中显示,其他报文中显示为空。

options:

7d21af591a584747aa90b9c42024f492.png

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值