3.3 传输层 :
tcp/udp==》基于端口 端口+IP =====通信
端口范围:0-65535,其中0-1023为系统所有
ip地址+port=》标识全世界范围内独一无二的一个基于网络通信的应用程序
tcp三次握手和四次挥手
基于TCP协议通信之前:必须建立一个双向通信的链接
C------------------------------------>S
C<------------------------------------S
三次握手建立上面的双向通信的链接通道:
建立链接是为了传数据做准备的,三次握手即可
第一次握手:请求建立
第二次握手:确认+请求
第三次握手:确认
四次挥手断开链接,把两个通道都断掉:
断开链接时,由于链接内有数据传输,所以必须分四次断开 前面三次握手,
通道已经建立好,在数据正在传输的情况下有了四次挥手
第一次挥手:请求关闭
第二次挥手:响应,等数据发完
第三次挥手:再回发一个请求断开
第四次挥手:确认关闭
tcp传输是可靠的,原因是因为有发必有回,发送数据必须等到对方确认后才算完成,
才会将自己内存中的数据清理掉,否则重发
ps:当服务端大量处于time_wite状态时以为着服务端正在经历高并发
TCP协议的半连接池:
backlog
[链接请求1,链接请求2,链接请求3,。。链接请求5]
3.4 应用层:
应用层由来:用户使用的都是应用程序,均工作于应用层,互联网是开发的,大家都可以开发自己的应用程序,数据多种多样,必须规定好数据的组织形式
应用层功能:规定应用程序的数据格式。
可以自定义协议==》头部+数据部分
自定义协议需要注意的问题:
1、两大组成部分=头部+数据部分
头部:放对数据的描述信息
比如数据要发给谁,数据的类型,数据的长度
数据部分:想要发的数据
2、头部的长度必须固定
因为接收端要通过头部获取所接收数据的详细信息
HTTP HTTPS FTP
3.5 socket层
我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。
能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。
为何学习socket一定要先学习互联网协议:
1.首先:本节课程的目标就是教会你如何基于socket编程,来开发一款自己的C/S架构软件
2.其次:C/S架构的软件(软件属于应用层)是基于网络进行通信的
3.然后:网络的核心即一堆协议,协议即标准,你想开发一款基于网络通信的软件,就必须遵循这些标准。
4.最后:就让我们从这些标准开始研究,开启我们的socket编程之旅
三.网络通信实现
想实现网络通信,每台主机需具备四要素
- 本机的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服务器等等参数
3.6 小结:
mac+ip+port 走到传输层
mac+ip+port+URL 走到应用层定位到资源
详细请看: https://www.cnblogs.com/linhaifeng/articles/5937962.html#_label9