Linux中的网络协议

OSI七层模型和TCP/IP五层模型

OSI七层模型

OSI(Open System Interconnection Reference Model),开放系统互联参考模型。
OSI是一个7层功能协议的结构,功能结构如下图所示。


image.png

从OSI模型来看,计算机发送数据时,数据会从高层向底层逐层传递,在传递过程中进行相应的封装,并最终通过物理层装换为光/电信号发送出去。计算机接受数据的时候,数据会从底层向高层逐层传递,并进行相应的解封装。

TCP/IP协议簇

TCP/IP模型是一个五层结构,具体结构如下图所示。


image.png

在OSI模型中我们习惯把每一层的数据单元都称为协议数据单元,例如第6层的数据单元叫做L6 pdu,第3层的数据单元称为L3 pdu,其中L表示层。
在TCP IP模型中,物理层的数据单元称为比特,把数据链路层的数据单元称为帧,把网络层的数据单元称为分组或包,对于传输层,我们习惯了把通过TCP封装而得到的数据单元称之为段。把通过udp封装而得到的数据单元称之为报文,对于应用层把HTTP封装而得到的数据单元称之为HTTP报文,把通过FTP封装而得到的数据单元称之为FTP报文。
OSI模型和TCP/IP 模型的区别是在于两者之间使用的协议不同。
在TCP/IP模型中最重要的两个协议就是tcp协议和ip协议

TCP三次握手四次挥手

TCP三次握手

TCP是一种可靠的传输协议,为什么说是可靠的呢?在使用TCP协议传输数据之前,需要现在两个通信端之间建立一条TCP连接,当TCP连接建立的时候就可以开始传输数据了。在数据传输完成之后,就会断开连接。

TCP连接建议需要经过三次握手。过程如下图


image.png

先来看看TCP报文的结构,其中SYN,ACK都是位于标志位的,包括其他的一些标志,seq是存在报文的序号字段中,ack是存在于报文的确认号字段里面,


image.png
  • 源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口
    某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通
    信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个,即65536
  • 序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字
    节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从
    0 开始
  • 确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:
    我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号
  • 数据偏移:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需
    要指定这个TCP报文段到底有多长。它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有
    多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就
    是TCP首部最大60字节
  • URG:表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只
    有当URG=1时才有效
  • ACK:表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规
    定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段
  • PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如
    果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到
    的数据读走,就会一直停留在TCP接收缓冲区中
  • RST:如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放
    连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志
    的TCP报文段称为复位报文段
  • SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报
    文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同
    意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段
  • FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的
    数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段
    窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方
    发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value *
  • Window size scaling factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值
  • 校验和:提供额外的可靠性
  • 紧急指针:标记紧急数据在数据字段中的位置
  • 选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长
    为:(2^4-1)*4-20=40字节

下面来说说具体过程。

第1步:客户端向服务器发送建立连接请求,并发送带有SYN标志的数据报文,其中客户端序列号随机生成的seq为x。
第2步:服务器收到客户端的请求之后会回应一个SYN+ACK的数据报文,其中seq=y,ack=x+1,其中服务器端序列号随机生成的seq是y,并且回复一个ack=x+1的确认号,以表示自己收到了客户端的请求消息,并且希望下一次发送的seq为x+1。
第3步:客户端收到来自服务器的回应消息后,再发送一个标志位为ACK的确认报文,其中序列号为x+1,确认号为y+1。满足上一步服务器要求发送的seq序列号,确认号ack则是希望下次收到来自服务器的消息的序列号是y+1.
通过上面的三个步骤,TCP连接便建立起来,这个方式也是被称为TCP的三次握手。

TCP四次挥手

image.png

TCP四次挥手
第一步 客户端发送FIN ACK控制段,表示传输已经完成,确认可以断开连接,其中序列号为seq=a
第二步 服务器端收到来自客户端的请求消息后,回应一个ACK确认字段 序号为seq=b,确认序列号为ack=a+1。
第三步 在回应来自客户端确认断开连接消息的同时也会向客户端发送一条自身也需要断开连接的确认消息FIN ACK控制段,其中序号为seq=c 确认序号为ack=a+1
第四步 客户端回应来自服务器端的断开连接请求,控制段为ACK,确认断开连接 其中seq=a+1 确认序号为ack=c+1。
至此,TCP四次挥手完毕,TCP连接断开.

TCP和UDP的区别

TCP 是面向连接的,建立通信需要经过三次握手,UDP 是面向无连接的,不许需要经过三次握手。
UDP程序结构较简单;如下图


image.png

TCP 是面向字节流的,UDP 是基于数据报的
TCP 保证数据正确性,UDP 可能丢包
TCP 保证数据顺序,UDP 不保证

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容