传输层 tcp\udp>>>基于端口
那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。
端口范围0-65535,0-1023为系统占用端口
传输层功能:建立端口到端口的通信
端口号 是操作系统自动分配的ip+port=》标识全世界范围内独一无二的一个基于网络通信的应用程序
基于tcp协议通信之前:必须建立一个双向通信的链接
建立链接是为了传数据做准备的,三次握手即可
数据传输
断开链接时,由于链接内有数据传输,所以必须分四次断开
应用层给传输层(tcp协议)的数据过多的话 会将数据多段传输
tcp协议的半连接池:backlog #[链接请求1,链接请求2,链接请求3,链接请求5]
就是服务端 同时能接受链接请求的“池子”
tcp是可靠传输的
发送数据必须等到对方确认后才算完成,才会将自己内存中的数据清理掉,否则重传
ps:当服务端大量处于TIME_WAIT状态时意味着服务端正在经历高并发
udp是不可靠传输的
不需要建联接,发送数据无须等到对方确认即可完成
应用层:
可以自定义协议=》头部+数据部分
自定义协议需要注意的问题:
1、两大组成部分=头部+数据部分
头部:放对数据的描述信息
比如:数据要发给谁,数据的类型,数据的长度
数据部分:想要发的数据
2、头部的长度必须固定
因为接收端要通过去掉头部获取所接接收数据的详细信息
网络通信实现
想实现网络通信,每台主机需具备四要素
本机的IP地址
子网掩码
网关的IP地址
DNS的IP地址
获取这四要素分两种方式
1.静态获取
即手动配置
2.动态获取
通过dhcp获取
以太网头
ip头
udp头
dhcp数据包
(1)最前面的”以太网标头”,设置发出方(本机)的MAC地址和接收方(DHCP服务器)的MAC地址。前者就是本机网卡的MAC地址,后者这时不知道,就填入一个广播地址:FF-FF-FF-FF-FF-FF。
(2)后面的”IP标头”,设置发出方的IP地址和接收方的IP地址。这时,对于这两者,本机都不知道。于是,发出方的IP地址就设为0.0.0.0,接收方的IP地址设为255.255.255.255。
(3)最后的”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地址是双方的网卡地址,IP标头的IP地址是DHCP服务器的IP地址(发出方)和255.255.255.255(接收方),UDP标头的端口是67(发出方)和68(接收方),分配给请求端的IP地址和本网络的具体参数则包含在Data部分。
新加入的计算机收到这个响应包,于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数
DNS(域名系统):主要用于域名与 IP 地址的相互转换
socket介绍 #让操作系统来包解应用层一下的头的