OSI七层协议、TCP协议和UDP协议。为什么客户端最后还要等待2MSL?为什么建立连接是三次握手,关闭连接确是四次挥手呢? 如果已经建立了连接,但是客户端突然出现故障了怎么办?

文章介绍了网络编程的基础知识,包括互联网协议的作用,OSI七层协议的各层功能,如物理层的发送高低电频,数据链路层的数据帧结构,网络层的IP协议和IP地址,传输层的TCP协议与UDP协议,以及TCP的三次握手和四次挥手过程。此外,还讨论了客户端在TCP连接关闭后的2MSL等待,以及客户端故障时的保活计时器机制。
摘要由CSDN通过智能技术生成

1 网络编程
2 OSI七层协议
3 TCP协议和UDP协议

1. 为什么客户端最后还要等待2MSL?
2 为什么建立连接是三次握手,关闭连接确是四次挥手呢?
3 如果已经建立了连接,但是客户端突然出现故障了怎么办?

1 网络编程

网络编程:我们要基于网络来编写一款B/S或者是C/S架构的软件

一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列的协议,
总称为“互联网协议”(Internet Protocol Suite)。

互联网协议的功能:定义计算机如何接入 Internet,以及接入 Internet 的计算机通信的标准

2 OSI七层协议

1. 什么是网络?
	网络的本质就是:上传和下载数据的过程
	"""
		世界上最初的计算机是不能互相通信的,只是在局域网中通信,随着技术的发展,
		世界范围开始通信,通过网络通信,即互联网通信
	"""
	网络的组成部分:物理连接设备(网线、交换机、路由器等)+计算机通信协议

2. 互联网通信协议(OSI的七层协议)
	物理层
	数据链路层
	网络层
	传输层
	会话层
	表示层
	应用层
3. 五层协议
	物理层
	数据链路层
	网络层
	传输层
	应用层

****************************************************************
1.物理层:
	是专门用来发送高低电频的
	注意1:
		单出的发送高低电频没有意义,需要对电频进行分组,以表示不同的意思
	注意2:
		物理层是不能做分组的
----------------------------------------------------------------
2.数据链路层
	是专门用来做分组使用的
	数据链路层称之为是一个数据帧,数据帧有两部分组成:head(报头)+data(真实数据)
		head部分:固定18个字节,即:
			发送者/源地址,6个字节
			接收者/目标地址,6个字节
			数据类型,6个字节
		data:最短46个字节
		数据的具体内容:head长度 + data长度 = 最短64字节
	"""
		数据链路层使用的是以太网协议,以太网协议规定,任何接入互联网的计算机都应该有一个网卡,
		默认的就叫以太网
	"""
	MAC地址:每一个网卡都要有一个Mac地址,每块网卡出厂时都被烧纸上一个世界上唯一的Mac地址,
	长度48位二进制,通常由1216进制表示
	
	Mac地址可以确定局域网中唯一一台计算机
----------------------------------------------------------------------
3.网络层
	网络层使用的是IP协议,IP协议规定接入互联网的计算机都必须要有一个IP地址,
	网络层的数据称之为是数据包,IP地址的分类:IPv4、IPv6
	IP地址:ip地址可以确定世界范围内任意的一个局域网
	IP地址的组成:
		IPv4地址的格式
		0.0.0.0   ------------------------ 255.255.255.255
		000000000.00000000.00000000.00000000 ----------- 11111111.11111111.11111111.11111111
	如何查看自己的电脑的IP地址:
		windows系统:ipconfig
		linux(macos):ifconfig
	
	1.公网IP:固定的,不变,需要购买的(服务器),阿里云、腾讯云、百度云等
		例如,172.12.1.101
	2.内网IP:
		例如,192.168.1.63  这是会变的
	
	子网掩码:IP + 子网掩码
	"""
		IP地址+MAC地址可以确定世界范围内唯一一台计算机
	"""
	一般情况下,只需要IP地址就可以确定世界范围内的唯一一台计算机,为什么呢?
	因为:有一个叫 arp 协议,可以根据IP地址计算出来Mac地址,所以,有了IP地址就相当于有了Mac地址。
	'''
	arp协议由来:计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,
	然后通过以太网协议发送,在谈及以太网协议时候,我门了解到通信是基于mac的广播方式实现,
	计算机在发包时,获取自身的mac是容易的,如何获取目标主机的mac,就需要通过arp协议

arp协议功能:广播的方式发送数据包,获取目标主机的mac地址
	'''
	注意:
		本地回环地址:127.0.0.1(就是找自己的电脑)
----------------------------------------------------------------------	
4. 传输层
	传输层使用的TCP协议和UDP协议,也称为端口协议,我们一般使用端口来表示一个个的应用程序
	一个端口表示一个正在运行的应用程序

	端口:0-65535
	"""
		1. 0-1024之间的端口号一般是系统使用的,我们尽量不要使用,否则有可能会造成端口冲突
		2. 1025-8000之间的端口号一般是常用软件的端口号
			MySQL的默认端口号:3306
			Django的默认端口号:8000
		3.我们开发的软件,尽量使用8000以后的端口
	"""	
	
	常用软件的端口号:
		应用层     FTP    TFTP   TELNET   SMTP    DNS   HTTP  SSH
		MySQL 3306
		熟知端口   20,21    69      23      25     53     80    22

		DNS:域名解析
		baidu.com
		jd.com
		'''
			域名的本质其实就是IP地址,域名最终还是要解析成对应的IP地址,才能找到IP对应的计算机
		'''
		例如: baidu.com --------DNS------- 172.12.1.1

		是因为我们有个地方保存了域名和IP地址的对应关系
		假设:baidu.com    127.0.0.1
		
		注意:有的文件没有后缀是因为文件名是给我们看的,而文件是可以有后悔也可以没有后缀,linux中,一切皆文件
	例如,查看保存的IP地址
	1.先从自己电脑中的host文件中查找
	2.若host文件中没有找到对应的关系,再去对应平台的关系中查找
	3.域名是需要购买的,并且是需要备案的
---------------------------------------------------------------------
5.应用层
	Application
	应用层才程序员离的最近的一层
	1.客户端:想用什么协议就用什么协议,客户端是我们自己开发的
	2.浏览器:我们就不能随便使用协议了,就要按照浏览器协议HTTP
	3.HTTP协议
	  HTTPS协议

	假设网址:https://www.baidu.com?tn=23324302_42_hao_pg
			协议:https://域名:端口/v1/v2?参数
	
	'''
		http特征:
			1.不安全,因为经过http协议的数据都是明文传输的
		https协议:
			2.安全的,经过https协议传输的数据都是密文传输

		https = http + ssl证书
		ssl证书:要机构申请,国际组织,怎么用呢?
		NGINX服务器,需要再Nginx服务器的配置文件中配置一些代码才能使用

	'''
	

互联网协议按照功能不同分为OSI七层或 TCP/IP 五层或 TCP/IP 四层
OSI七层协议
OSI七层协议数据传输的封包与解包过程
在这里插入图片描述

3 TCP协议和UDP协议

TCP协议的三次握手和四次挥手
TCP协议也叫可靠协议,流式协议(数据是可以多次发送的)

三次握手 ----------------> 为了建立链接

四次挥手 ----------------> 断开链接

TCP协议的三次握手为什么可以保证数据安全?是因为建立了双向通道吗?
原因是:TCP协议的反馈机制

面试题:
1.为什么建立连接是三次握手?关闭连接却是四次握手呢?
	'''
		客户端与服务端之间一定是客户端先向服务器发起请求,而不能反过来

		特殊情况:
			服务端可以主动向客户端发起请求,websocket协议,一般用在即时通信软件中
	'''

UDP协议:
	1.不建立双向连接,也没有三次握手
	2.速度快


1. 为什么客户端最后还要等待2MSL?

MSL(Maximum Segment Lifetime),TCP允许不同的实现可以设置不同的MSL值。

	1.保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,
站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,
应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,
而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。
	2.防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。
客户端发送完最后一个确认报文后,在这个2MSL时间中,
就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。
这样新的连接中不会出现旧连接的请求报文。

2 为什么建立连接是三次握手,关闭连接确是四次挥手呢?

	建立连接的时候,服务器在listen状态下,收到建立连接请求的SYN报文后,
把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,服务器收到对方的FIN报文时,
仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,
所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,
因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。

3 如果已经建立了连接,但是客户端突然出现故障了怎么办?

	TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,
白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,
若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,
以后每隔75秒发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,
接着就关闭连接。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值