- 几种常见三层协议
IP 网际网络协议
ICMP 网络控制管理协议 Ping 测试连通性指令
ARP 地址解析协议 - 四层协议
TCP 传输控制协议
UDP 用户数据报文协议 - 端口号
0-65535 1-1023(著名端口) 1024-65535(动态端口、高端口) - 几种常见的应用层服务及端口号
FTP 文件传输协议 TCP 21
Telnet 远程登录 TCP 23
HTTP 超文本传输协议 TCP 80
DNS 域名解析系统 UDP/TCP 53
HTTPS 安全HTTP TCP 443
MSS 最大段长度 以太网 1480B
MTU 最大传输单元 以太网 1500B
OSI七层模型
- 第七层:应用层 (Application)
通过人机交互的界面提供各种各样的服务
(协议有:HTTP FTP TFTP SMTP SNMP DNS) - 第六层:表示层(Presentation Layer)
数据的表示、安全、压缩。
(格式有,JPEG、ASCll、DECOIC、加密格式等)
(在五层模型里面已经合并到了应用层) - 第五层:会话层(Session Layer)
对应主机进程,指本地主机与远程主机正在进行的会话,建立、管理、终止会话。
(在五层模型里面已经合并到了应用层) - 第四层:传输层 (Transport)
定义传输数据的协议端口号,以及流控和差错效验。
(协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层) - 第三层:网络层 (Network)
通过IP地址进行逻辑寻址,实现不同网络之间的路径选择。(路由器)
(协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP) - 第二层:数据链路层 (Link)
建立逻辑连接、进行硬件地址寻址、差错效验等功能。(由底层网络定义协议)
将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
逻辑链路控制层 LLC 为上层提供服务 提供FCS校验
媒介访问控制层 MAC 网桥/交换机 - 第一层:物理层(Physical Layer)
定义电气、电压、光学特性、接口规范 中继器/集线器
TCP的三次握手与四次挥手
三次握手(建立连接):
-
首先由A(客户端)向B(服务端)发送一个连接请求syn报文(syn=1),并置发送序号seq为x,代表向B发送想要连接的请求
-
B(服务端)收到A(客户端)发送的syn报文请求连接后,发送syn和ack(syn=1,ack=x+1)报文,并置发送序号seq为y,再确认序号为x+1,代表已经收到了A的请求并同意要连接,将这个消息发给A
-
A收到了B的报文后,发送ack(ack=y+1)报文,并置发送序号seq为z,再确认序号为y+1
三次握手目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。
四次挥手(关闭连接): -
首先由A(主动方)向B(被动方)发送一个fin报文(fin=1),并将ack置为z,置发送序号seq为x,表示请求与B断开连接
-
B(被动方)收到了来自A(主动方)的fin报文,并同意与其断开连接,则会先发一个确认的ack(x+1)报文,置发送序号seq为z
-
B(被动方)随即发一fin报文(fin=1)给A(主动方)断开连接,并置发送序号seq为y(ack=x)
-
A(主动方)收到B(被动方)发送一个fin报文后,发送ack(ack=y)报文,并置发送序号seq为x,确认断开连接
TCP的连接的拆除需要发送四个包,因此称为四次挥手。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。
-
为什么建立连接协议是三次握手,而关闭连接是四次握手
服务端的LISTEN状态下的SOCKET当收到SYN报文的连接请求后,可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可能未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。 -
为什么不能用两次握手进行连接?
3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。若把三次握手改成仅需要两次握手,死锁是可能发生的。作为例子,考虑计算机S和C之间的通信,假定C给S发送一个连接请求分组,S收到了这个分组,并发 送了确认应答分组。按照两次握手的协定,S认为连接已经成功地建立了,可以开始发送数据分组。可是,C在S的应答分组在传输中被丢失的情况下,将不知道S 是否已准备好,不知道S建立什么样的序列号,C甚至怀疑S是否收到自己的连接请求分组。在这种情况下,C认为连接还未建立成功,将忽略S发来的任何数据分 组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。
Ipv4地址
-
基础:
32位二进制,点分十进制
分为网络位(标识所在网段)和主机位(网段中唯一标识某主机)
完整的IP地址需要掩码
IPV4 2^32=4294967296 42亿个地址
IPV6 128w位 2^128 -
掩码的作用:(掩码同样32位二进制,点分十进制,32进制中,0表示主机位,1表示主机位)
可以根据掩码得知网络位的位数与主机位的位数
(例如:255.255.255.0二进制表示就是11111111111111111111111100000000故网络位为24,主机位为8位) -
主类网一般分为:
A 0 0000000—0 1111111 0-127
B 10 000000—10 111111 128-191
C 110 00000—110 11111 192-223
D 1110 0000—1110 1111 224-239
E 1111 0000----1111 1110 240-254
单播地址:ABC 一对一 (分为1.公有地址:全球唯一性 需要付费使用 2.私有地址:本地唯一性 无需付费)
组播地址:D 一对一组
广播地址: 一对多
科研使用:E
特殊ip地址:
- 127.0.0.1/8 本地环回地址,测试设备网卡是否能工作(ping+ip/域名)
- 169.254.0.0/16 本地私有地址(DHCP获取不到地址时电脑自动分配的地址)
- 0.0.0.0/0 无效地址/缺省地址(默认地址)
- 主机位全为0的地址 例:192.168.1.00000000/24 代表本网段内所有主机—主机位全0(代表网络范围的所有主机)
- 主机位全为1的地址 例:192.168.1.11111111/24 代表本网段内的广播地址—主机位全1(代表本网络范围的广播地址)
- 255.255.255.255 全局广播地址
报头
- TCP报头(20B):
- UDP报头(8B):
- IP报头(20B):