以太网协议:
6字节对端MAC地址/6字节源端MAC:描述哪两个相邻的设备在进行通信!
2字节上层协议类型:数据分用时,网络层协议选择!
4字节CRC帧尾:校验和
dmac|smac|p|data|crc
mac地址:网卡的 物理硬件地址,出厂时设定,早期不可更改,uint8_t mac[6]
ARP协议:介于网络层与链路层之间的协议 -----通过相邻的设备的ip地址获取其设备的mac地址
广播ARP请求:指定相邻设备的ip地址,相邻的设备收到请求后,检验IP地址是否与自己相符,如果相符则填充mac地址进行 响应
ARP局域网欺骗攻击:恶意主机会伪装自己的IP地址,进而进行mac地址响应!
ip与mac地址的映射会缓存一段时间,大概20-30分钟,因为大多数都是DHCP动态地址分配!
MTU:链路层用来限制数据帧大小!主要是指以太网帧中的数据长度!默认以太网是1500.
mtu对tcp的影响:tcp三次握手的时候会协商MSS的大小(MTU-20协议与ip报头大小-20tcp报头大小也叫最大数据段大小),双方会选取,较小的一方作为最大数据段大小。每次从数据缓冲区中取出合适大小的数据!所以我们说TCP协议会在传输层进行自动的数据分段,而在数据层不会进行数据分段!
mtu对于UDP协议的影响:udp协议没有mss的概念,只要数据不大于64k-28都可以进行传输,但是如果大于mtu就会在网络层进行数据分片,而分片到达对端时,会进行重组,但是如果其中一个分片出现问题,则其他分片都会被丢弃。故udp不保证数据的可靠传输!也就说明在应用层确认使用udp进行传输,需要程序员自己进行分包,尽可能避免出现分片,要自己对MSS的大小进行计算!
其他典型协议与技术:DNS/ICMP/NAT/NAPT/代理
DNS:域名系统----进行域名解析,通过域名获取服务器的IP地址
域名:服务器的别名----一串字符串,相较于IP地址更加容易记忆
域名服务器的划分:根域名服务器--》一级域名服务器-》二级域名服务器-》三级域名服务器、
域名的解析流程:
1.查看浏览器缓存/2.查看hosts文件/3.请求本地域名服务器/4.根域名服务器/5.一级域名服务器/6.二级域名服务器
迭代请求:本地域名服务器逐个请求各级域名服务器
递归请求:逐层深入
浏览器中输入url回车后发生了什么?
1.域名解析2.根据http协议组织请求数据3.搭建tcp客户端连接服务器,发送请求!4.等待响应,得到后进行解析渲染
ICMP:网络层协议---发送icmp请求,要求指定主机进行回复,完成 网络探测 -----ping工具
NAT/NAPT:网络地址转换技术,主要用于组建私网,私网中主机对外通信就是进行网络地址转换,而后记录映射关系,使用私网对外同一的地址进行通信,节省了IP地址的使用。常部署在网关设备上,工作在网络层,进行流经网关设备的数据的源端地址进行替换!
代理服务:个人主机与服务器之间的互联网网络代理尙,个人主机请求代理服务器,代理服务器请求指定服务器得到响应后会回复给个人主机,可以部署在任意主机上,工作在应用层!
利用qq发送消息,来传串一下TCp/ip五层:
首次编写一个qq程序,而后会将程序运行起来变成一个进程,而后开始处理,采集键盘数据,得到的数据后,从线程池中拉出一个线程,而后在这个线程中,组织qq协议格式数据,描述这个数据是发送给哪个qq的(应用层协议封装)。在应用层封装完毕后会创建套接字,搭建tcp客户端,连接qq服务器,连接建立后,send发送数据!发送的数据是存放在发送缓冲区当中的,而后tcp三次握手客户端与服务端进行协商MSS的大小,从发送缓冲区中取出合适大小的数据进行进行封装tcp头部:通过端口描述哪两个进程在进行通信,通过协议中的序号,确认序号进行包序管理,并且实现确认应答机制,以及发送端通过超时重传机制保证可靠传输!通过协议中校验和校验发送与接收的数据是否一致!通过协议中窗口大小字段,实现滑动窗口机制,进行流量控制,以及接收端 的数据排序!发送端通过拥塞机制们进行网络探测,防止网络不好而出现丢包太多!传输层封装完毕之后,会将数据交给网络层进行IP封装。描述是网络中哪两台主机在进行数据通信,tcp会自动进行数据分段(mss就是通过MTU计算得出),因此不会数据分片!描述TTL生存周期防止路由环路,描述传输层协议用于数据分用!在网络层封装完毕之后,将数据交给链路层;通过arp请求获取到指定的ip地址的相邻设备的mac地址;通过mac地址描述是哪两台相邻设备之间进行传输;通过协议中的上层协议类型,用于数据分用时网络层的协议选择。通过物理层将电信号发送出去!
我现在是将数据从我的主机发送给我家里的路由器(我主机的网关设备),我的主机第一次连接到网关设备的时候会广播dhcp请求,获取到网关的ip地址,以及给自己分配的IP地址,生成自己的路由表,数据发送到路由器这个家里的网关设备上后,路由器会根据自己的路由表,以及目标地址,逐个匹配最终生成一条路径,应该将数据发送给哪个与自己相连的网络,发送之前会进行NAPT地址替换映射(指定端口收到回复的时候应该回复响应给哪个家里的主机),然后由路由连接指定相邻网络的这个网卡将数据发送到这个网络。数据经过这些路由器逐层转发之后就会到达对端!