最近,许多读者对TPC接口的含义有疑问。有网友整理了相关内容,希望能回答你的疑惑。关于,这个网站已经为你找到了问题的答案,希望对你有所帮助。
推荐视频:
网络原理tcp/udp,网络编程epoll/reactor,面试中严肃的“八股文”
手写用户态协议栈和零拷贝的实现
学习地址:C/C Linux服务器开发/后台架构师[零声教育]-学习视频教程-腾讯课堂
一、OSI七层协议
物理层:
很久以前,当时还没有外星人超级电脑,或者华为的P30。调皮的小明想把机器上写的一些个人游戏经历(如何玩好王者农药)发给小红(校花),希望赢得心。调皮的小明想把机器上写的一些个人游戏经历(如何玩好王者农药)发给小红(校花),希望赢得心。小明个人比较勤奋,游戏总结经验比较详细(大概有100M)。但他怎么能从自己的机器上传到小红的机器呢?经过询问,他发现远离太平洋另一端的科学家发明了一种技术 专门用于解决小明单身狗问题的物理层。该层主要定义物理设备标准,如网线接口类型、光纤接口类型、各种传输介质的传输速率等。其主要功能是传输比特流(即从1、0转换为电流强度,到达目的地后转换为1、0,通常称为数模转换和模数转换)。这一层的数据称为比特。
经过一个月的努力,他非常兴奋,终于建立了这个物理层。
数据链路层:
然而,上帝似乎和小明开了个玩笑。楼下小润发超市的网线和光纤最近卖光了,但物理层传输的数据只能通过网线传输。到底怎么办!!。
此时,他体内的雄激素促使他的大脑以光速运转。最后,他饿了,不得不去学校食堂三楼吃麻辣烫。这时,听到隔壁坐着的王叔叔(老王)说,科学家们发明了一种可以通过无线电传输的技术。What?这难道不能完美地解决自己的烦恼吗?小明赶紧对隔壁老王说谢谢,老王留下了幸福的泪水!!
通过对数据的一些努力,小明发现这种技术可以通过电线发送数据流,也可以通过其他媒体传输。然后确保传输过去的比特流是正确的,并具有纠错功能。定义了如何传输格式化数据,以及如何控制物理介质的访问。这一层通常提供错误的检测和纠正,以确保数据的可靠传输。
小明称层技术为数据链路层
网络层:
由于小明家离小红家很远,无线电信号无法传输到哪里,但小明一点也不难。他在离小红家的路上搭建了多个节点(路由器、交换机),用于传输信号。但是因为他有时候被雄激素冲昏头脑,所以建立的信号节点有点乱,而且很多。他想用最短的路径传输怎么办?当小明沮丧地回家时,已经是深夜了。他看到王叔叔今天匆匆走出家门。他迅速抓住王叔叔,告诉他他的麻烦,希望王叔叔能给自己一些帮助。小明说完后,王叔叔从紧张变成了善良,对小明说:其实有人发明了网络层。也就是说,具有寻址功能的路由器和交换机的设备所实现的功能。这一层定义为IP地址,通过IP地址找到地址。因此产生了IP协议。这一层可以选择最好的路径,这就是路由要做的。
传输层
为了趁热打铁,小明通宵查资料学习相关信息,简单搭建网络层,开始传输数据,趁着传输过程好好睡一觉。当他起床时,噩梦才刚刚开始,因为他传输了太多的数据(100M)只传输了一部分,而且断断续续,有些数据根本无法传输。那怎么办?
“加一层传输层!!!王叔叔在楼下大声喊道:“信息在你妈妈的床头柜里”,王叔叔继续说。小明赶紧找到资料,上面写着:“
向另一台计算机发送正确的比特流数据,但当我发送大量数据时,可能需要很长时间,如视频格式,网络会多次中断(事实上,即使有物理层和数据链路层,网络经常中断,但中断时间为毫秒级)。
所以,在传输大量文件时,我也必须确保准确性。所以,我想包装发出的数据。就像发快递一样,一个个发。
例如TCP,它是用来发送大量数据的。我发送了1000个包,另一台电脑会告诉我是否接受了1000个包。如果缺少3个包,告诉我第1001、234和8888个包丢失了,然后我再发一次。这样,对方就可以完全接收视频。
例如UDP,用于发送少量数据。我送20个包出去,一般不会丢包,所以,不管你收到多少个。UDP协议经常用于多人互动游戏,因为它通常是简单的信息,需要广播。如果用TCP,效率很低,因为它会一直告诉主机我收到了20个包,或者我收到了18个包,然后寄给我两个!如果同时有1万台计算机这样做,使用TCP会降低效率。最好使用它UDP,即使主机发出去,扔几个包就卡住,算了,下次再发包再更新。
TCP该协议是绑定IP和端口的协议,下面将介绍IP协议。
通过这样的操作,他!小明终于把自己1000了M游戏体验发送给小红
会话层(解除与其他接口的联系)
然而,小红根本不玩游戏。得知这个消息后,小明楞逼了。但他没有放弃,而是把他猜到小红喜欢的所有信息都发给了他,但每次小明发送,我是否每次都要打电话给TCP打包,然后打电话给IP协议找到路由。这是一天。我该怎么办?
他翻阅了王叔叔的笔记本信息,写道:会话层可以帮助我们建立和管理应用程序之间的通信,打包TCP,然后调用IP协议找到路由和其他操作
这样,他就可以成功地建造一台传输数据的机器,只需要十分钟或二十分钟。
表示层(数据格式化、代码转换、数据加密)
有一次,小明发了一篇关于如何购买化妆品的文章。小红对此非常感兴趣,但当小红想用自己的window打开文件时,她发现根本打不开文件。后来,小红告诉小明,她下课后不能打开文件,小明想用Linux系统把它完全发给小红,这很奇怪,但出于帅气,小明只是轻轻地说:“我放学后再给你一份!”。”。
这时,虽然小明不知道出了什么问题,但他坚信老王叔叔的信息笔记会有答案。果然!上面清楚地写着:“现在我可以保证应用程序自动收发包和寻址了。但是我想用Linux给它window两个系统的语法不一致,就像安装包一样,exelinux下不能使用,shell也不能直接在window下运行。所以需要表示层(presentation),帮助我们解决不同系统之间的通信语法问题。”
小明立即用一夜之间手动搭建了表示层,并向小红传递了一份完美的文件
应用层(文件传输、电子邮件、文件服务、虚拟终端)
官方OSI说明图:
TCP/IP协议
TCP/IP该协议由七层模型简化为四层。(TPC/IP协议实际上是指四层模型中的所有协议,区分TCP协议,IP协议)
物理层、数据链路层、网络层、传输层、会话层、表示层、应用层分别为七层。
简化后的四层是:主机到网络层(比特)、网络层(数据帧)、传输层(数据包)、应用层(数据段)。
上层的每一层都是透明的,上层只需要使用下层提供的接口,不在乎下层是如何实现的。
对比OSI七层协议:
传输层:
网络层是主机和主机之间的通信,而传输层是过程之间的通信。
- 为什么要有传输层?这个过程应该是资源分配的基本单位,计算机之间的信息传输只是一台计算机传输到另一台计算机的过程
- 一台计算机如何找到另一台计算机,即通过IP协议完成(重复使用,信息可以通过多个过程传输到IP层,然后传输到另一台计算机)。
- 如何找到另一台计算机的过程?(pid)那就是用端口(分用,到达另一台计算机后,通过端口号找到相应的过程)
[文章福利]需要C/C Linux81285908服务器架构师学习资料加群C/C ,Linux,golang技术,核心,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg,大厂面试题 等)
传输层主要有两种协议:UDP和TCP
一、UDP协议
特点:
- 没有连接,在传输数据时不需要建立连接,以减少成本
- 尽最大努力交付,不能保证可靠的交付
- 面向报文
- 没有拥塞控制,保证信息的实时性
- 支持一对一、一对多、多对一、多对多
- 第一个开销很小,只有8个字节
UDP的首部格式(UDP头):
- 源端口、发送方端口
- 目标端口、接收方端口
- 长度,首部长度 用户数据包的长度(没有数据包,最小值为8)
- 检查和检查UDP用户数据传输是否有错误,如果有错误,请丢弃(检查第一部分的长度 用户数据包)
二、TCP协议
A、特点:
- 面向连接的协议。数据传输前应建立连接(三次挥手),数据传输结束时应释放连接(四次挥手)
- TCP连接只能有两个端点,端点是socket(结构 IP地址:端口号),不是主机或过程。
- 可靠交付
- 全双工通信(一端可以是发送方或接收方)
- 面向字节流
B、TCP为何可靠?
事实上,TCP依赖于停止 等待协议和连续性ARQ 协议 滑动窗口协议达到可靠的目的
a、等待协议
特点:资源利用率很低
工作原理
客户向服务端发送一次数据,必须等到服务端响应后再发送第二次数据,RTT占大部分时间,如果中间有错误(超时或确认丢失),则需要重新传输。
b、连续ARQ协议
连续ARQ协议的工作原理
保持发送窗口(记录当前可以发送的数据包数量)n),窗口中的数据可以连续发送。服务器只在收到发送窗口的数据后回应(累计确认)。当发送端收到响应时,将发送窗口移动到n位,并开始新一轮的数据发送。
以上只是对TCP协议发送流程的简单了解。如果你想知道发送细节,你必须知道TCP报纸的第一部分
TCP报文段的第一个格式
TCP虽然面向字节流,但TCP传输的数据单元是报文段,由第一部分和数据两部分组成,如图
一、源端口和目标端口(各占两个字节)
二、序号(占4字节):TCP连接传输的数据每个字节都有一个序号,一个报文段可能有多个字节的数据,指的是TCP报文段中的起始序号,下一个报文段的序号是序号加上报文数据的长度(SYN或三次握手和四次挥手)ACK会消耗一个序号,即指序号。
3、确认号(占4字节):由于一次数据传输将分为多个报文段,如果接收人在接收一个报文段后想发送确认号(可能不需要确认,因为只有在接收发送窗口的报文段后才能确认),则将携带确认号,接收人想要接收的下一篇报纸的序列号
4、数据偏移(占4字位):数据部分的起始位置与报文段的起始位置之间的距离是报文第一部分的长度。该单位为4字节,因此4位可以表示最大值为15,即15 x 4字节=60字节,TCP报纸第一部最大长度为60字节
五、保留(占6位):未使用,全置为0
六、紧急URG:当URG=1.紧急数据有效。请注意,URG不是紧急数据,而是一个标志,标志着紧急数据是否有效
七、确认ACK:当ACK=1时确认号才有效,当建立连接后全部传输的报文都要把ACK设置为1
八、推送PSH:接收方机器会有一个接收,当接收缓存慢了才回把接收到的数据交付到接收应用进程中,而如果发送端把报文的PSH设为1,接收方接收到该报文会立即交付到应用的进程中
九、复位RST:两个作用,1、当RST=1时,表示TCP连接中出现严重差错,必须释放连接,然后重新建立运输连接。2、当RST=1时,拒绝一个非法的报文段或拒绝打开一个连接。
十、同步SYN:用于同步序号(告诉另外一方,他们之间从该序号开始传输报文段),当SYN=1,ACK=0表示这时一个连接请求报文。
十一、终止FIN:用于释放一个连接。当FIN=1时,表明此报文的发送方的数据已经发送完毕,并要求释放运输连接。
十二、窗口(占2字节),是一个接收窗口,接收方允许发送方发送的数据量
十三、检验和(占2字节):检验接收过来的报文段(报文首部和用户数据)是否有误
十四、紧急指针(占2字节):当URG=1时才有效,指出紧急数据未尾位置(开始位置是整个报文段中用户数据的开头)
十五、选项,长度可变,最长40字节
那到底TCP是如何实现可靠传输的呢?
TCP可靠传输的实现
一、通过滑动窗口来发送数据
- 发送窗口有两部分组成,已发送的报文段 和 能够发送但未发送的报文段(等待已发送报文段全部接收完发回来的确认就可以发送了)
- 当收到确认后发送窗口会向右移动到7位置,作为窗口的起始位置。
- 发送窗口,发送窗口有可能会收缩(因为接收窗口有可能因为接收缓存不够而变小)
二、超时重传时间的选择
采用一个根据RTT动态计算的时间,并不是直接采用一个固定的时间
RTT:发送一个报文段到收到对应的ACK所花费的时间
RTO:超时重传时间
RTTs是一个加权平均RTT时间
RTTd是RTTs偏差的加权平均
RTO=RTTs + 4 * RTTd
如果发生了重传 ,这次的RTT会让RTTs会变大,此时是不会用该RTT来计算RTTs的
三、确认SACK
是一个TCP报文首部的选项。
当数据传输过程中,接收方可能会未按顺收到部分报文段,此时序号告诉发送方从新传输这些报文段,SACK选项就是用于告诉发送方需要传输那些报文段的
TCP传输连接管理
连接的三个阶段:建立连接、数据传输、连接释放
在建立连接的过程中要解决三个问题:
1、使每一方都知道对方的存在
2、协商一些参数
3、能够运输实体资源
主动建立连接的一端叫客户端,被动等待连接建立的一方叫服务器
连接建立(三次握手)
如图:
每次发送一个seq时,都会消耗一个序号,所以会发现在确认时,ack总等于另一端请求的seq+1
为何需要第三次握手?
假设没有第三次握手(即A再次确认)
在很久很久以前,A发了一个连接请求给B,但是网络滞留的原因,请求没有到达B,所以B也没有确认返回给A,所以A右发送了一个连接请求给B,此时B收到了连接请求并返回了一个确认给A,此时连端开始愉快的数据传输之旅。当传输结束时,分别断开连接,各自干各自的活儿。但是过了一段时间,之间滞留在网络中的A发出的连接请求到达了B中,B以为A又要传输数据,便右回了一个确认给A,但是A并不需要输出传输,也没有理会这个确认,而B却在傻傻等待A传输数据,这个就会浪费B的资源。
但是如果有第三次A的确认,A这个滞留的连接传给B,B返回一个确认,但是A不想传输数据了,便没有回一个确认给B(第三次握手),B没有收到该确认也不会等待A传输数据。
连接释放(四次挥手)
如图:
第一次挥手:客户端发送连接,FIN=1标志着A已经完成了数据的发送。
第二次挥手:B回了一个确认,此时A与B的发送连接就断开了。
第三次挥手:因为TCP连接是全双工通信的,B还保留着一个对A大发送连接,如果等到B也不需要发送数据给A时,B会发送一个连接给A,seq等于一个大于或等于v的值(因为A与B断开发送连接到B与A断开发送连接期间有可能B向A发送了数据,就是消耗序号)。
第四次挥手:当A收到B的连接时,要回一个响应给B,但是此时会有一个2MSL长的等待时间,时间一过,就真正的断开与B的全部连接了。
为什么需要2MSL的等待时间?
MSL:最长报文寿命
当A发送确认给A后,如果此时出现了一些状况(连接被丢弃等),确认无法到达B中,B会重新发送一个连接给A,但是A就停止了,B就一直等待(其实有一个保活时间)。
如果有了这个等待时间,就算A的ACK确认丢失了,B也会再从新发送一个连接给A,A接收到该连接后,会从新计算等待时间。A会再确认一次
应用层
HTTP协议
特点:
- 支持客户端 / 服务器模式
- 简单快速
- 灵活
- 无连接,在完成一次请求获得响应后就会断开
- 无状态,没有记忆的,请求完一次后,就结束了,后面如果要再获得数据必须从新请求
请求报文的结构
请求头部:用于设置请求的的一些参数如:ContentType
请求空行:就算请求数据为空,都要有空行,表示请求首部的结束
从浏览器地址栏键入URL,回车后会尽力的流程:
- DNS解析
- TCP连接
- 发送HTTP请求
- 服务器处理请求,并返回HTTP报文
- 浏览器解析渲染页面
- 连接结束
GET请求与POST请求的区别
- HTTP报文层面:GET请求信息放在URL中,POST放在报文体中
- 数据库层面:GET符合幂等性和安全性,POST不符合
- 其他层面:GET可以被缓存、储存,而POST不行
Cookie和Session的区别
为什么会有这两种技术?
在使用一些需要登录的网站时,每次访问,都会需要验证个人信息,即登录。这样做比较繁琐,能否将个人的账号和密码存起来,访问的时候直接用存取来的个人信息进行验证呢?解决这个问题的就是Cookie和Session
Cookie:通过客户端(浏览器)来缓存个人信息。当用户第一次登录时,服务器会将个人信息放在了响应中, 浏览器接收到响应时候会将个人信息以Cookie的形式访问浏览器中保存起来,在下一次访问服务器的时候会带上该Cookie,Cookie中有个人信息,服务器能解析出来,所以不同再次登录验证了。(不够安全,对服务器的开销小)
Session通过服务端来缓存信息,根据请求中是否包含Session id的字段,如果不存在则创建一个,并返回给浏览器缓存起来。如果存在则通过该Session id在服务器存储中获得对应的Session信息,直接验证。(安全,服务器的开销变大)
HTTP与HTTPS的区别:
1、HTTPS需要到CA申请证书,HTTP不需要
2、HTTPS密文传输、HTTP明文传输
3、连接方式不同,HTTPS默认使用443端口,HTTP使用80端口
4、HTTPS=HTTP + 加密+认证+完整性保护,较HTTP安全
其实也不一定就安全,原因是用户不会再访问时候加上http:// 或 https://, 浏览器就默认会加上http://,然后通过转发的方式转成https:// 这个过程http就有可能会被劫持了。
此时会用到一个技术 HSTS(HTTP Strict Transort Security)
主题测试文章,只做测试使用。发布者:艾迪号,转转请注明出处:https://www.cqaedi.cn/baike/48398.html