参考
https://www.w3school.com.cn/tcpip/tcpip_intro.asp
https://blog.nowcoder.net/n/c58243574f3b49b1ac8f6d76aa5965bc?from=nowcoder_improve
Ⅰ TCP/IP协议分层
TCP/IP协议族按照层次由上到下,层层包装。
应用层
向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口。TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能。
运输层
提供应用程序间的通信。其功能包括:一、格式化信息流;二、提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送。
网络层
负责相邻计算机之间的通信。其功能包括三方面。
一、处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。
二、处理输入数据报:首先检查其合法性,然后进行寻径–假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。
三、处理路径、流控、拥塞等问题。
网络接口层
这是TCP/IP软件的最低层,负责接收IP数据报并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层。
Ⅱ IP地址
每个计算机必须有一个 IP 地址才能够连入因特网。
每个 IP 包必须有一个地址才能够发送到另一台计算机。
TCP/IP 使用 32 个比特来编址。一个计算机字节是 8 比特。所以 TCP/IP 使用了 4 个字节。
一个计算机字节可以包含 256 个不同的值:
00000000、00000001、00000010、00000011、00000100、00000101、00000110、00000111、00001000 … 直到 11111111。
这就是为什么使用TCP/IP协议的地址是0到255。
Ⅲ 在 TCP/IP 内部
在 TCP/IP 中包含一系列用于处理数据通信的协议:
TCP (传输控制协议) - 应用程序之间通信
UDP (用户数据包协议) - 应用程序之间的简单通信
IP (网际协议) - 计算机之间的通信
ICMP (因特网消息控制协议) - 针对错误和状态
DHCP (动态主机配置协议) - 针对动态寻址
TCP/IP 意味着 TCP 和 IP 在一起协同工作。
TCP 负责应用软件(比如你的浏览器)和网络软件之间的通信。
IP 负责计算机之间的通信。
TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们。
IP 负责将包发送至接受者。
Ⅳ 关于三次握手和四次挥手
几个TCP协议首部的标志位
SYN:同步序号。
FIN:发端完成发送任务。
ACK:确认序号有效。
PSH:接收方应该尽快将这个报文段交给应用层。
RST:重建链接。
几个状态
CLOSED:关闭状态,没有连接活动正在进行。
LISTEN:监听状态,服务器正在等待连接进入。
SYN_RCVD:收到一个连接请求,尚未确认。
SYN_SENT:已经发出连接请求,等待确认。
ESTABLISHED:连接建立,正常数据传输状态。
FIN_WAIT_1:(主动关闭)已经发送关闭请求,等待确认。
FIN_WAIT_2:(主动关闭)收到对方关闭确认,等待对方关闭请求。
TIME_WAIT:完成双向关闭,等待所有分组消失。
CLOSING:双方同时尝试关闭,等待对方确认。
CLOSE_WAIT:(被动关闭)收到对方关闭请求,已经确认。
LAST_ACK:(被动关闭)等待最后一个关闭确认,并等待所有分组消失。
英文缩写
ack:它和大写的ACK不同,它不是标志位,只是一个确认序号,它的序号值表示接收端期待接受的下一个报文的序号值。例如:ack = x+1 表示接收端现在已经确认收到前x个报文,接下来该接收第x+1个报文。
seq:表示当前发送的报文序号,后面依次加一,初始序号是动态随机生成的(后面有详细解释为什么要随机)。
MSL:Maximum Segment Lifetime,最长报文寿命,假设具有最大跳数限制的IP分组在网络中存在的时间不可能超过MSL秒(每个IP分组都有一个TTL,没经过一跳路由器,TTL-1)。RFC1122建议MSL = 2min,现在的网络常设为30s。
Ⅴ 三次握手
建立连接的过程共需要三个报文段,故称“三次握手”,建立连接的过程如下图所示。
具体过程:
- 服务启动后一直处于监听状态,等待客户端的连接请求。客户端发起连接请求,首部标志位SYN置为1,同时选择一个序列号seq = x,这时客户端进入SYN_SENT状态。(SYN报文段不能携带数据)。
- 服务器收到连接请求后,结束监听状态,给客户端回复确认报文,SYN = 1,ACK = 1,seq = y,确认号ack = x+1,进入SYN_RCVD状态。
- 客户端收到服务器的确认报文后,结束监听状态,给客户端回复确认报文,SYN = 1,ACK = 1,seq = x+1,ack = y+1。随后进入ESTABLISHED状态,此后双方可以进行全双工通信,此后报文中标志位SYN均等于0。
Ⅵ 四次挥手
具体过程:
- 客户端首先发出拆除连接报文,FIN = 1,进入FIN_WAIT_1状态。
- 服务器收到拆除连接请求,回复确认报文,ACK = 1。
- 客户端收到回复进入FIN_WAIT_2 状态,等待服务器发送拆除连接报文,此时服务器还可以给客户端发送数据。服务器若没有要发送的数据,则发送一个拆除连接报文,FIN = 1。
- 客户端对此报文回复确认,之后并不会马上关闭连接,而是进入一个TIME_WAIT状态,等待2MSL后,才进入CLOSED状态。而服务器在收到回复报文后就立即进入CLOSED状态。