TCP/IP协议基础

1.TCP/IP模型的分层

在这里插入图片描述

1.1网络接口层(Network Interface Layer):(数据链路层)

功能:
	①将数据帧发送到物理网络,并从物理网络接收数据帧。
	②处理硬件地址,如MAC地址。
主要协议:
	Ethernet、Wi-Fi、PPP等。

1.2网络层(Internet Layer):

功能:
	数据包的路由和寻址,以便将数据包传递到目标主机。
主要协议:
	IP、ICMP、IGMP

-IP协议(Internet Protocol,互联网协议)

提供无连接的、不可靠的数据报服务。

主要作用是实现数据包在网络中的传输和路由,

它定义了数据包的格式和传输方式。

-ICMP协议(Internet Control Message Protocol,互联网控制报文协议)

在IP协议基础上工作,用于在网络中传输错误信息和控制信息。

主要作用是向网络中的设备提供错误和异常的通知,

以及实现诸如ping等网络诊断工具的功能。

-IGMP协议(Internet Group Management Protocol,互联网组管理协议)

用于IP多播的协议,

用于在主机和路由器之间交换多播组成员信息,

以便使网络中的设备能够加入和离开多播组。

主要作用是管理多播组成员信息,以便网络中的设备能够进行正确的多播数据传输。

1.3传输层(Transport Layer):

功能:
	数据的分段和重新组装,以及数据的可靠传输。
主要协议:
	TCP、UDP。

-TCP(Transmission Control Protocol,传输控制协议)

提供端到端的数据传输服务

特点:
	面向连接,可靠传输,
	有流量控制和拥塞控制机制,
	支持全双工通信

-UDP(User Datagram Protocol,用户数据报协议)

用于不需要可靠传输和流量控制的应用程序,比如DNS、TFTP等。

特点:
	无连接,不可靠传输,支持广播和多播等。


1.4应用层(Application Layer):

功能:
	提供网络应用程序与传输层之间的接口。

主要协议:
	HTTP、FTP、SMTP、DNS、SSH等。

-HTTP:Hypertext Transfer Protocol(超文本传输协议)

应用于Web浏览器和Web服务器之间的通信。

是一种无状态协议,

也就是说每个请求与响应之间是相互独立的。

-FTP:File Transfer Protocol(文件传输协议)

主要用于在网络上进行文件的传输。

通过使用用户名和密码来控制对文件的访问权限。

-SMTP:Simple Mail Transfer Protocol(简单邮件传输协议)

用于电子邮件的传输。

通常使用25号端口,

支持文本和二进制数据的传输。

-POP3:Post Office Protocol version 3(邮局协议版本3)

一种用于从邮件服务器上检索电子邮件的协议。

通常使用110号端口,

支持简单的文本协议。

-IMAP:Internet Message Access Protocol(互联网邮件访问协议)

用于从邮件服务器上检索电子邮件的协议,

与POP3不同的是,它允许用户在服务器上创建、删除和移动邮件。

-Telnet:Telecommunication Network(电信网络)+ Terminal(终端)(远程登录协议)

允许用户从一台计算机上登录到另一台计算机,

并在远程计算机上运行应用程序。

-SSH:Secure Shell(安全外壳协议)

用于远程登录的安全协议,

使用加密技术来保护登录过程中传输的数据。

-DNS:Domain Name System(域名系统)

用于将域名(如www.example.com)转换为IP地址(如192.0.2.1)。

通常使用53号端口。

-DHCP:Dynamic Host Configuration Protocol(动态主机配置协议)

用于为计算机自动分配IP地址、子网掩码、网关等网络配置信息。

通常使用67号端口(服务器)和68号端口(客户端)。

2.TCP头

每行32位,4字节
  0               1               2               3       
  0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |          Source Port          |       Destination Port        |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                        Sequence Number                        |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                    Acknowledgment Number                      |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  Data |           |U|A|P|R|S|F|                               |
 | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
 |       |           |G|K|H|T|N|N|                               |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |           Checksum            |         Urgent Pointer        |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                    Options                    |    Padding    |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                             data                              |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

其中各字段的含义如下:

2.1源端口号(Source Port)和目的端口号(Destination Port):

用于标识发送方和接收方的应用程序。

在TCP连接建立时,双方需要交换各自的端口号。

2.2序号(Sequence Number):

用于标识TCP数据流中的**每个字节**。

每个TCP数据段都有一个序号,

表示本段数据的第一个字节在整个数据流中的位置。

2.3确认号(Acknowledgment Number):

用于确认接收方已经正确接收到了发送方发送的数据。

确认号表示接收方期望下一个接收的字节的序号。

2.4数据偏移(Data Offset):

指定TCP头部的长度,以4个字节为单位。

取值范围为0~15,表示TCP头部长度为0 - 60字节。

2.5控制标志(Flags):

包括6个标志位,

分别为URG、ACK、PSH、RST、SYN和FIN,

用于控制TCP连接的建立、维护和关闭。
Flags含义
URG(URGent)本数据段中包含紧急数据,紧急指针指明紧急数据的位置
ACK(ACKnowledgment)确认号有效,确认接收方已正确接收到发送方发送的数据
PSH(PuSH)表示数据应该立即被推送给应用程序,而不是在接收到更多数据后再推送
RST(ReSeT)表示连接重置,用于中断异常连接
SYN(SYNchronization)表示建立连接的请求,用于TCP三次握手。
FIN(FINish)表示关闭连接,用于TCP四次挥手

2.6窗口大小(Window Size):

表示接收方能够接收的数据量大小。

发送方根据窗口大小来决定发送的数据量。

2.7校验和(Checksum):

用于检测TCP头部和数据的正确性。

发送方在发送数据时计算校验和,并将其放在TCP头部中。

接收方在接收数据时同样计算校验和,

并将其与TCP头部中的校验和进行比较,以判断数据是否正确。

2.8紧急指针(Urgent Pointer):

用于标识TCP数据段中的紧急数据。

如果URG标志被设置,

那么紧急指针指定的字节表示紧急数据的最后一个字节的位置。

2.9选项(Options):

TCP头中还可以包含一些可选字段,

如时间戳、最大分段大小(MSS)等。

这些选项的使用是可选的,取决于具体实现。

2.10 填充(padding):

在IP头部中,如果选项字段的长度不是32位的整数倍,

则需要使用填充(padding)字段将其补齐。

填充字段是一些全为0的比特,以确保选项字段的长度是32位的整数倍。

3.IP头(IPV4)

每行32位,4字节
 0               1               2               3       
 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|          Total Length         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         Identification        |Flags|      Fragment Offset    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |         Header Checksum       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Source Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Destination Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options                    |    Padding    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

IP头是Internet协议(IP)中用于封装传输数据的头部信息,

包含了IP协议中一些重要的控制信息。

下面是IP头中各字段的具体含义:

3.1版本(Version):

指定IP协议的版本号,

IPv4的版本号为4,

IPv6的版本号为6。

3.2首部长度(Header Length):

指定IP头部长度,以4个字节为单位。

取值范围为0~ 15,表示IP头部长度为0~60字节。

3.3区分服务(Differentiated Services,DS):

用于对IP数据包进行分类和区分处理,

以实现不同服务等级的提供。

3.4总长度(Total Length):

指定整个IP数据报(包括头部和数据)的长度,

以字节为单位。

3.5标识(Identification):

用于标识一个IP数据报的唯一性,由发送方生成。

3.6 标志位(Flags):用于标识IP数据报的一些属性。

  - DF(Don't Fragment):
  		表示该数据报不允许被分片。
  
  - MF(More Fragments):
  		表示该数据报是一个分片,并且还有其他分片未到达目的地。

3.7分段偏移(Fragment Offset):

用于标识分段数据包相对于原始IP数据包中的位置。

3.8生存时间(Time to Live,TTL):

指定IP数据包在网络中可以经过的最大跳数。

每经过一个路由器,TTL值会减1,

当TTL值为0时,数据包将被丢弃。

3.9协议(Protocol):

指定上层协议类型,如TCP、UDP、ICMP等。

3.10 头部校验和(Header Checksum):

用于检测IP头部的正确性。

发送方在发送数据时计算头部校验和,并将其放在IP头部中。

接收方在接收数据时同样计算头部校验和,

并将其与IP头部中的校验和进行比较,以判断数据是否正确。

3.11 源IP地址(Source Address)和目的IP地址(Destination Address):

用于标识发送方和接收方的IP地址。

在IP数据包经过网络传输时,每个路由器都会根据目的地址进行转发。

4.三次握手(3-way handsherk)和四次挥手 (4-way wavehand)

TCP/IP协议的三次握手和四次挥手,

即建立和关闭TCP连接,

可以确保数据传输的可靠性和完整性。

4.1三次握手

在这里插入图片描述

第一步(SYN):

 synchronization   /ˌsɪŋkrənaɪ'zeɪʃ(ə)n/
客户端发送一个SYN包给服务器端,

并且该包中包含了客户端初始化序列号的值。

此时,客户端处于SYN_SENT状态。

第二步(SYN-ACK):

服务器端收到SYN包后,返回一个SYN-ACK包,

该包中包含了服务器端初始化序列号的值和对客户端序列号的确认。

此时,服务器端处于SYN_RCVD状态。

第三步(ACK):

客户端收到SYN-ACK包后,发送一个ACK包作为对服务器端的确认。

此时,客户端处于ESTABLISHED状态,

而服务器端则从SYN_RCVD状态转变为ESTABLISHED状态。

4.2四次挥手

在这里插入图片描述

第一步(FIN):

当客户端想要关闭连接时,

它发送一个FIN包给服务器端,表明它不再发送数据。

此时,客户端进入FIN_WAIT_1状态。

第二步(ACK):

服务器端收到FIN包后,返回一个ACK包确认。

此时,服务器端进入CLOSE_WAIT状态,

而客户端处于FIN_WAIT_2状态。

第三步(FIN):

当服务器端也想要关闭连接时,它发送一个FIN包给客户端,

表明它不再发送数据。

此时,服务器端进入LAST_ACK状态,等待客户端的确认。

第四步(ACK):

客户端收到FIN包后,返回一个ACK包确认。

此时,客户端进入TIME_WAIT状态,

并且等待2MSL时间(两倍的最大报文存活时间)后,关闭连接。

服务器端收到ACK包后,进入CLOSED状态。

5.相关面试题

👉面试题👈

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值