网络基础知识-后篇
1 互联网协议
层 | 单位 | 内容 | 协议 |
---|---|---|---|
物理层 | 位 (bit) | 二进制数据 | |
数据链路层 | 帧 (frame) | 帧头 + 数据 | 以太网协议 |
网络层 | 包 (packet) | IP报头 + 数据 | IP协议 ARP协议 |
传输层 | 段 (segment) | TCP/UDP报头 + 数据 | TCP协议 UDP协议 |
应用层 | 数据 |
数据链路层提供mac地址,用于定位子网内的主机。
网络层提供ip地址,用于区分子网。
ip地址 + mac地址 可以标识定位世界上独一无二的一台主机
自定义协议需要注意的问题:
- 协议由两部分组成:头部 + 数据部分
头部:存放数据的描述信息,例如发送者,接收者,数据类型和长度等;
数据部分:发送的数据。 - 头部长度必须固定
接收者首先需要通过头部数据获取所接收数据的详细信息,需要区分出数据中哪一部分是头部数据。
2 传输层
传输层用于建立端口到端口之间的通信。
2.1 端口
端口是应用程序与网卡关联的编号,用于定位主机上的基于网络通信的程序。
端口范围为:0-65535,其中0-1023为系统占用端口。
ip地址 + mac地址 + port地址可以标识世界上的独一无二的一个基于网络通信的程序。
2.2 tcp协议
2.2.1 tcp报文
2.2.2 三次握手 四次挥手
基于tcp协议进行通信需要在客户端与服务端之间建立一个双向连接通道。
建立连接通路的方式是三次握手,
断开连接通路的方式是四次挥手。
2.2.3 三次握手
名词:
- SYN:同步序列编号(Synchronize Sequence Numbers)
TCP建立连接时使用的握手信号。 - ACK:确认字符(Acknowledge Character)。
- seq:序列号(Sequence)。
三次握手步骤:
第一次握手
客户端向服务端发送SYN包申请连接(SYN=1,seq=x),然后客户端进入状态SYN_SENT,等待服务端确认。
第二次握手
服务端收到SYN包后,必须确认客户的SYN(ack=x+1),同时向客户端发送一个包进行确认并申请连接,即SYN+ACK包(SYN=1,ACK=1,seq=y,ack=x+1),此时服务端从Listen状态进入SYN_RECV状态。
第三次握手
客户端收到来自服务端的SYN+ACK包,向服务端再次发送确认包ACK(ACK=1,seq=x+1,ack=y+1),客户端发送后进入ESTABLISHED(TCP连接成功)状态,服务端收到后也进入ESTABLISHED状态。
2.2.4 数据传输
tcp协议下的传输属于可靠传输,数据发送后都会等待对方回应,只有收到成功接收的回应后这次发送才算完成,否则一段时间后再次发送。
2.2.5 四次挥手
第一次挥手
客户端进程发出连接释放报文,并且停止发送数据,客户端进入FIN-WAIT-1(终止等待1)状态。
FIN=1,其序列号为seq=u,其中u等于前面传送过来的数据的序号加1。TCP协议规定,FIN报文段即使不携带数据,也要消耗一个序号。
第二次挥手
服务端收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。
此时客户端不会再向服务端发送数据,但服务端可以继续向客户端发送数据,因此客户端与服务端之间的通路处于半关闭状态。
客户端收到服务端的确认后,进入FIN-WAIT-2(终止等待2)状态,还要继续接收来自服务端的数据,等待服务端发送连接释放报文。
第三次挥手
服务端发送数据完毕后,向客户端发送连接释放报文,FIN=1,ack=u+1,此时,服务端就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
在通路处于半关闭状态时,服务端很可能又发送了一些数据,假定此时的序列号为seq=w。
第四次挥手
客户端收到服务端的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
服务端收到了客户端发出的确认后,立即进入CLOSED状态。撤销TCB后,就结束了这次的TCP连接。
2.2.6 经验
- 如果服务端大量处于SYN_RECV状态,此时服务端有可能正在遭受SYN洪水攻击;
- 如果服务端大量处于TIME_WAIT状态,此时服务端正在经历高并发。
2.2.7 半连接池
允许等待的最大连接请求数。
限制的是同一时刻的连接请求数,而非连接数。
相当于队列,后进先出。
2.3 udp协议
- udp协议下的传输属于不可靠传输;
- udp协议下的传输速度快。
udp协议不需要建立连接,传输数据后不需要对方确认。
3 应用层
基于网络的应用程序一般工作于应用层。
应用层用于规定应用程序的数据格式。
Socket抽象层将应用层以下的传输层,网络层,数据链路层和物理层都进行了封装,因此应用层只需与Socket抽象层打交道。
4 其它
4.1 DHCP协议
4.1.1 介绍
DHCP协议(动态主机配置协议,Dynamic Host Configuration Protocol),是自动为处于内网的机器分配IP地址等信息的局域网协议,用于动态获取IP地址。
4.1.2 工作流程
基于udp协议发包。
以太头 | ip头 | udp头 | DHCP数据包 |
---|
- 以太网标头”
存放发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。
此时本机不知道DHCP服务器的MAC地址,于是,接收方的MAC地址设置为广播地址:FF-FF-FF-FF-FF-FF; - IP标头
设置发出方的IP地址和接收方的IP地址。
这时本机不知道这两个IP地址,于是,发出方的IP地址设置为0.0.0.0,接收方的IP地址设设置为255.255.255.255; - UDP标头
设置发出方的端口和接收方的端口。
端口是DHCP协议规定好的,发出方使用68端口,接收方使用67端口。
处于同一个子网内每台主机都会收到这个包。
接收方的MAC地址是FF-FF-FF-FF-FF-FF,无法判断接收者是谁,因此收到包的主机需要分析这个包的IP地址,才能确定是不是发给自己的。
当看到发出方的IP地址是0.0.0.0,接收方是255.255.255.255时,DHCP服务器知道这个包是发给我的,而其它主机可以丢弃这个包。
DHCP服务器读取这个包的数据,分配IP地址,发送一个”DHCP响应”数据包。在响应包中,以太网标头中的MAC地址是双方的网卡MAC地址,IP标头中的IP地址分别是DHCP服务器的IP地址(发送方)和255.255.255.255(接收方),UDP标头中的端口分别是67(发送方)和68(接收方)。分配 给请求端主机的IP地址和本网络的具体参数等信息则包含在Data部分中。
新加入子网的主机收到这个响应包后,就知道分配给自己的IP地址、子网掩码、网关地址、DNS服务器等参数。
4.2 DNS
DNS(Domain Name System)域名系统,主要用于域名与IP地址之间相互转换。DNS能够使用户使用网址更方便地访问互联网,而不需要去记住由数字组成的IP地址。