2021-01-14了解套接字编程概念,知道osi的四层协议,掌握tcp的三次握手四次挥手

学习套接字编程的目的是为了开发一个c/s或者B/S架构的软件
client ----- 网络 ----server
用客户端与服务端建立连接,他们通过网络进行通信,不需要遵守一些浏览器的协议规定,需要写两个程序,想怎么交互
就怎么交互,不过因为要写两个程序相对麻烦一些
browser----- 网络 ----server
用户通过浏览器与服务端建立连接,同样通过网络进行通信,不过必须遵守浏览器之间的协议规定,只写服务端即可,简单,要遵循浏览器的规定

互联网 = 物理连接介质 + 通信协议

为何要学协议,只有掌握数据在传输过程中应该遵循哪些协议(标准),才能更好开发互联网软件

互联网七层网络
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层

五层网络:

应用层 : 传输的是数据,遵循HTTP,ftp等协议

传输层 传输的是数据段 识别端口号,找到特定的软件
tcp,udp协议,tcp是可靠传输,udp是不可靠传输

网络层 传输的是数据包() 利用IP地址找寻接收方的局域网 遵循
IP,ARP协议

数据链路层 传输的是数据帧(发送方,接收方mac地址)在同一局域网中基于Mac地址找到目标计算机的 遵循的是以太网协议

物理层 传输的是固定位数的二进制数

以太网协议:
早期的时候各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议ethernetethernet规定一组电信号构成一个数据包,叫做‘帧’每一数据帧分成:报头head和数据data两部分
     head	                       data                             
head包含:(固定18个字节)
发送者/源地址,6个字节
接收者/目标地址,6个字节
数据类型,6个字节
data包含:(最短46字节,最长1500字节)

数据包的具体内容
head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送

mac地址:
head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址
mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为482进制,通常由1216进制数表示(前六位是厂商编号,后六位是流水线号)
IP协议:
规定网络地址的协议叫ip协议,它定义的地址称之为ip地址,广泛采用的v4版本即ipv4,它规定网络地址由322进制表示
范围0.0.0.0-255.255.255.255
一个ip地址通常写成四段十进制数,例:172.16.10.1
ip地址分成两部分
网络部分:标识子网
主机部分:标识主机
注意:单纯的ip地址段只是标识了ip地址的种类,从网络部分或主机部分都无法辨识一个ip所处的子网

例:172.16.10.1172.16.10.2并不能确定二者处于同一子网
arp协议由来:计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送,在谈及以太网协议时候,我门了解到
通信是基于mac的广播方式实现,计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议
arp协议功能:广播的方式发送数据包,获取目标主机的mac地址
那么我们通过ip和mac找到了一台特定的主机,如何标识这台主机上的应用程序,答案就是端口,端口即应用程序与网卡关联的编号。
传输层功能:建立端口到端口的通信
补充:端口范围0-655350-1023为系统占用端口
tcp协议:
可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
以太网头	ip 头                	tcp头              	数据
                                                    
 udp协议:
不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
以太网头	ip头               udp头                  	数据                                          

tcp报文如下:
在这里插入图片描述

ip + mac = 》标识全世界范围内独一无二的计算机
ip + mac + 端口协议 = 》标识全世界范围内独一无二的
一个基于网络通信的软件

tcp协议可靠原因:发送方发送数据后,收到接收方传来的确认信号,才会删除刚才发送的数据,缺点:相对于udp协议慢一些,大部分程序用的还是tcp协议
udp虽然传输快,但不管接收方收没收到数据,发完就将刚才发送的数据删除,通常用作查询,与实时聊天程序

tcp 的三次握手:
1、发送方syn_sent状态:发送方发送syn=1 seq=x请求建立连接,此时接收方为listen状态
2、接收方syn_rcvd状态:接收方将ack=1+x确认信号与接收方syn=1,seq=y请求建立连接的信号同时发给发送方,此时发送方还是syn_rcvd状态(此状态通常看不见)
3、发送方ESTABLISHED状态: 发送方将ack=1+y确认信号发送给接收方,接收方收到后变成ESTABLISHED状态,则双向连接成功

tcp的四次挥手
1、发送端FIN_WAIT状态:发送方传完数据,发送FIN seq = x+2 ACK= y+1断开连接的请求,此时接收端处于CLOSE_WAIT状态
2、接收端CLOSE_WAIT状态:接收端发送ACK= x+3的确认信号给发送端,发送端接收到信号后变成FIN_WAIT2状态,并关闭发送端的数据通道
3、接收端LAST_ACK状态:接收端发送完数据之后,发送
FIN seq = y+1断开连接的请求给发送端,此时发送端为TIME_WAIT状态
4、发送端TIME_WAIT状态:发送端发送ACK = y + 2确认请求给接收端,接收端收到就关闭,接收端进入CLOSED状态(此状态看不见)

在这里插入图片描述

原理:发送端发送请求时,操作系统会在半连接池(backlog)取出发送端发送的请求,并一一回应ack

洪水攻击,高并发:发送端不停地发送请求时,半连接池被占满,操作系统在半连接池(backlog)取出的发送端请求,
立刻被客户端新的请求占据,导致半连接池一直处于满的状态,此时其他用户想建立连接,连接不上

套接字层:由传输层,网络层,链路层,物理层封装而成,socket主要用于数据的发送
在这里插入图片描述

查看系统状态:
cmd命令行中输入:netstat -an

猜你喜欢

转载自blog.csdn.net/givenchy_yzl/article/details/112619793