TCP/IP协议
通常分为四层:应用层、传输层、网络互联层、主机到网络层
IP协议
ICMP协议:主要用于网络传输的诊断,错误,控制信息
IP数据报文 |
|
IP头部 |
ICMP报文 |
TCP协议:基于IP协议进行封装
----------------------------------------IP 数据--------------------------------------------------------
| -------------- tcp数据包 ----------------------------------
IP头部 | TCP头部 TCP数据
-----------------------------------------------------------------------------------------------------------
URG |
紧急指针字段 |
ACK |
确认标志位 |
PSH |
表示接受方许需要尽快将此数据交给应用层 |
RST |
重建连接 |
SYN |
发送连接请求 |
FIN |
将要断开请求 |
TCP协议连接的三次握手和断开时的四次握手
连接(connect):
主机A 主机B
一:主机A 发送SYN 段连接请求至B, 就是初始序列号(ISN)1234567890 |
|||
二:主机B接收到连接请求, 发送SYN段 987654321至主机A, 同时还会加上一个应答确认ack,即主机A的ISN+1,1234567891 |
|||
三:主机A收到应答确认及其主机B的回应连接,再次发送确认标准ack,主机B的SYN段里的ISN+1,即 987654322,至此TCP连接完成 |
断开(break):
主机A 主机B
一:主机A 发送FIN 段断开请求至B, 1234567891包括ack应答标志987654322 |
|||
二:主机B接收断开请求,先发送ack确认标志 ISN+1, 1234567892 |
|||
三:主机B再发送FIN断开请求,987654322和应答标志,主机A的ISN+1, 1234567892 |
|||
四:主机A对主机B的请求确认,发送确认标志 987654322 |
UDP协议:
数据包基本和tcp协议一致,与TCP不同的是,发送方不提供数据包的顺序,接受方不向发送方回应确认信息,所以UDP的数据传输不是安全的,不保证数据的完整性。
优点是执行速度会快很多,因为TCP传输对系统造成的负荷更高。
ARP协议:
主要用于建立IP和硬件地址的对应关系
比如ping IP的过程:
- 域名解析:ping程序判断是主机名还是IP, 如果是主机名,则会调用gethostby_name()得到32位的IP地址。
- ping程序向目的IP发送ICMP的ECHO包。
- 将目的IP转换成硬件地址(48)位, 这里就是调用ARP协议,发送ARP请求广播,查找目的主机硬件地址。
- 目的主机接受到ARP请求,发送ARP应答到请求主机
- 请求主机发送ICMP数据包到请求主机。
- 目的主机接收到ICMP数据包,发送响应包(就是ping打印的那一堆东西)
- 请求主机接受响应包
RARP协议:逆地址解析协议,即同过硬件地址获取ip地址
HTTP协议:
建立在TCP/IP协议的连接上,默认端口是80
FTP协议:也是建立在TCP协议上进行,和HTTP协议的区别是,FTP使用了两个TCP(并行)来传送文件,一个用来控制连接(21端口),一个数据连接(20端口),数据连接只负责数据传输,其它的命令,和用户名等管理均在控制连接里进行
FTP通常有主动和被动两种模式:
主动:数据采用标准端口进行传输连接
被动:数据传输采用高端口上的随机一个(即1024以上的端口),这里的注意有些防火墙对没开发的端口会进行拦截,所以需要主动和被动模式切换
传输数据一般使用二进制的传输方式, 保证数据文件完整性。
网络字节序的转换:
网络标准字节序位大端字节序
htons() ntohs() htonl () ntohl() s表示short类型 ,l代表long类型 ,h代表主机, n代表网络