HTTP、FTP、SMTP、Telnet等等协议,哦!那个HTTP协议啊就是访问网页用的那个协议啊然后那个······其实······你懂得,我们应该从实际来了解他,理解网络协议的作用与功能,然后再从根本来看他是具体怎么实现的。我们可以先从HTTP、FTP、DHCP、DNS、ARP等常见协议开始入手了解它是如何工作的,然后照着这个态度再去深入了解其他的协议。先不多扯了进入正题。

一、什么是TCP/IP?

顾名思义 TCP/IP(Transmission Control Protocol/Internet Protocol),传输控制协议/网际协议,TCP/IP是现代Internet的核心技术,由IETF定义。所有的系统、终端、线路、用户、开发者,都必须遵守TCP/IP协议族所规定的法则!IP世界的根本法就是TCP/IP协议族。这里我又扯到协议族了,就像快乐家族,不仅仅我们很熟悉的何炅、谢娜。不仅包括主持人,还有导演、摄像等等其他工作人员。TCP/IP也就像一个组,协议族。其中还包括HTTP、Telnet、FTP、RIP、UDP等等。其名字来源于其中最主要的两个协议-------TCP与IP。它们分别在TCP/IP模型的第二层与第三层。

二、OSI参考模型TCP/IP参考模型

IP世界是由通信实体过程的,而通信实体,是要分层的。分层的好处在于:

1、各层之间是独立的。

2、灵活性好。

3、结构上可分割开。

4、易于实现和维护。

5、能促进标准化工作。

所以通信实体必须分出层次,以保证各种网络技术能和谐地共存和良好地配合,并不断激励技术创新。所以在1984年,国际标准化组织(ISO)建立了一套非常抽象的分层结构,这就是著名的ISO/OSI(国际标准化组织的开发网络架构),这对我们分析网络通信是非常有帮助的。

物理层(第一层):物理层解决最基础的传送通道,涉及问题主要是建立、维护和释放物理链路所需的机械的、电气的/光学的、功能的和规程的特性,如光缆如何抗衰耗,无线设备如何提高发射功率,为什么双绞线要有屏蔽层等。

数据链路层(第二层):数据链路在物理层按“位”服务的基础上,在相邻的网络节点直接提供简单的、传输以帧为单位的数据,同时还负责流量控制、差错控制(信号会因机器、电器气等原因出现错误)。以我们经常听到的“以太网帧”可以知道以太网就是属于这层的。

网络层(第三层):网络层对上层-----传输层提供两种服务,一种叫做“面向连接”的网络服务,一种叫做“无连接”的网络服务。网络层担负着四大任务:1.路由选择 2.拥塞控制 3.局域网间互联 4.统计和控制。我们津津乐道的IP协议就在这层起着重要的作用。

传输层(第四层):传输层的任务是向用户提供可靠地、透明的端到端的数据传输以及差错控制和流量控制机制。由于它的存在会话层、表示层、应用层的设计不必考虑底层细节,因此起到“承上启下”的作用。假如两台计算机A、B需要通信,那么A、B之间进行直接的传输层的通信,而在A、B之间如果有若干网络节点,如路由器X、Y、Z那么A与X,X与Y,Y与Z,Z与B之间都要进行第三层的通信。TCP与UDP就属于传输层。

会话层(第五层):会话层提供许多增值服务,如交互式对话管理,允许一路交互、两路交换、两路同时回话;管理用户登录远程分时系统;在两机器之间传输文件,进行同步控制等。

表示层(第六层):表示层就处理通信进程之间交换数据的表示方法,包括语法转换、数据格式的转换、加密与解密、压缩与解压缩等。

第七层(应用层):应用层正所谓站在巨人的肩膀上面的产物,底层所有协议的最终目的都是为应用层提供可靠的传送手段,底层协议并没有直接瞒住用户的任何实际需求。我们日常使用的收发电子邮件、传送文件、流量网页、交互及时信息等都属于应用层,是用户体验最直观的服务。

正所谓“优胜劣汰,适者生存”,OSI由于体系比较复杂,不太方便计算机软件实现,逐渐退出人们关注的视野,TCP/IP得到了广泛的应用。

对比ISO/OSI的七层结构,读者会奇怪了:怎么没有表示层和会话层了呢?的确,在TCP/IP参考模型中这两层并不是必需的。其中还有个四层模型的说法数据链路层与物理层表示成网络接口层。TCP\IP体系结构最核心的部分就是上面三层:应用层、传输层、网络层。

(1)网络接口层:TCP/IP并没有严格定义该层,它只是要求能够提供给其上层-----网络层的一个访问接口,以便在其上传递IP分组。由于这一层次未被定义,所以其具体的实现方法将随着网络类型的不同而不同。以太网是IP通信中数据链路层最常见的形式,除此之外还有PPPHDLC等10Gbit/s以下的以太网一般应用于局域网,而PPP、HDLC则应用于广域网居多。

(2)网络层:俗称IP层,它处理机器之间的通信。IP是一个不可靠的、无连接协议,它接收来自传输层的请求,传输某个具有目的地址信息的分组。IP负责给互联网的每一台计算机或者终端分配一个地址,并将信息以IP包的形式传送到正确的目的地。这是TCP/IP的核心。IP协议族中最关键的是路由协议

(3)传输层:传输层控制协议(TCP)与用户数据报协议(UDP)是该层的重要协议。TCP是一个面向连接的,可靠地协议。它将一台主机发出的字节流无差错地发往互联网上的其他主机。在发送端,它负责把上层传送下来的字节流分成报文段并传递给下层。在接收端,它负责把收到的报文进行重组后递交给上层。TCP还要处理端到端的流量控制(滑动窗口机制)。UDP则是一个不靠谱,无连接的协议,主要适用于不需要对报文进行排序和流量控制的场合。(比如在信息传输中像重要文档与短信等等适用于TCP而视频传输可使用UDP)。

各个层次也对应着不同的协议如图:

三、TCP报文格式

TCP报文包括首部(报头)和数据部分,其中首部的具体字段如下。

(1)源端口号和目的端口字段-----各占16bit。

(2)序号字段-----SEQ序号,占32bit。TCP连接中传送的的数据流中的每一个字节都编上序号,序号字段的值则是本报文段所发送的数据的第一个字节的序号。

(3)确认序号-----ACK序号,32bit,是期望收到对方的写下一个报文段的数据的第一个字节的序号。只有ACK的标志位为1是,确认序号字段才有效,ACK=SEQ+1。

(4)标志位:有6个如下

URG-----紧急信号表明紧急指针(urgent pointer),它能告诉系统此报文段有紧急数据,应尽快传送。

ACK-----确认信号只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。

PSH-----推送信号接收TCP推送bit置1的报文段,则尽快交付给接收应用进程,无需缓存。

RST-----复位信号当RST=1时,表明TCP连接中有严重错误,则释放连接,然后再重新建立连接。

SYN-----同步信号SYN表示一个连接请求或连接接收报文。

FIN-----终止信号用来释放一个连接。当FIN=1,表明报文段的发送端的数据已发送完毕,要求释放运输连接。

(5)数据偏移-----占4bit,它自出报文段的数据起始处距离TCP报文段起始处的位置。

(6)窗口字段-----占16bit,用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方确定对方的发送窗口上限。

(7)检验和-----占16bit,检验报文段的首部和数据,在检验之前要加上12字节的伪首部。

(8)紧急指针字段-----16bit。紧急指针指出在本报文段的紧急数据的最后一个字节的序号。

(9)选项字段-----无固定长度,TCP只规定了一种选项最大报文段长度MSS。

(10)保留字段-----占6位,暂无。

四、TCP的三次握手和四次挥手

TCP的连接和建立都是采用客户端服务器方式。主动发起连接建立的进程叫做客户端(Client)。被动等待连接建立的叫做服务器(Server)。

建立TCP连接需要三次握手如图

第一次握手:Client(主机A)想Server(主机B)发送一个连接请求,在这个包中标志位SYN=1,发送序号SEQ=x,上图中令x=200,Client进入SYN_SEND状态,等待Server确认。

第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,确认序号ACK=x+1=201,随机阐释一个发送序号y,令y=500。并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

第三次握手:Client收到去人后,检查确认序号ACK是否为x+1=201;标志位ACK是否为1,如果正确,则将标志位ACK置1,确认序号ACK=y+1=501,并将该数据包发送给Server,Server检查确认需号ACK是否为y+1=501,标志位是否为1,如果正确则 连接建立成功,Client和Server进入ESTABLISHED状态。

形象地来理解,加入客户端是小明,服务器是小红,小明寄了一份邮件给小红邮件的标号就是SEQ,SYN就是短信里面小明想处对象的意图。小红收到后,也寄了信给小明,SEQ同样是小红邮件的编号,ACK=SEQ+1就是表面自己已经收到小明前一份信息,ACK标志位置1表明小红同意了小明处对象的请求,SYN也表示小红有相处对象的意图。于是同理小明就开始寄信说我要开始追你了。然后两人开始聊起未来······。三次握手走向未来~~~~~~!所以男生还是要主动点。

(形象理解会有小出入)

断开TCP连接的四次挥手

第一次挥手:当客户端A要断开TCP连接时,发送一个包,其中标志位FIN=1,ACK=1,发送序号SEQ=X,确认序号ACK=Z,Client进入FIN_WAIT状态。

第二次挥手:客户B知道A要断开后,发送一个确认包,其中标志位ACK=1,发送序号SEQ=Z确认序号ACK=x+1,Server进入CLOSE_WAIT状态。

第三次挥手:客户B也断开TCP连接,此时发送一个包,其中,标志位FIN=1,发送序号SEQ=Z+1

,Server进入LAST_ACK状态。

第四次挥手:客户A收到B的断开请求后,Client进入TIME_WAIT状态,接着发送一个确认包,标志位ACK=1,发送序号SEQ=x+1,确认序号ACK=Z+2,Server进入CLOSE状态。

同样举个栗子,就不拿小红和小明作比较了毕竟刚刚才进入热恋状态,接下来是小涛和小翠。男人有钱就变坏,小涛是个渣男,所以首先签了离婚协议书还有自己的一些证件(要求一个人小翠去办理)(ack),然后附带自己的分手信(seq)寄给小翠。ACK置1,FIN置1。小翠收到信件后,也二话没说,先回了一份信并且说明已经收到小涛的分手信且同意了(seq+1)然后也把证件先递过去(ack)。最后等待离婚证下来(ack+1)然后再把离婚证给小涛寄过去(ACK=1,FIN=1)。最后小涛还可耻的嘲笑了小翠一番(seq+1)ACK=1。

五、TCP/IP协议体系的常见术语

(1)包

包(Packet)是网络上传输的数据片段,也称为分组。包是一种统称,在不同的协议,不同层次,包有不同的名字,如TCP/IP中,数据链路层的包叫做帧(Frame),IP层的包称为IP数据报,TCP层的包常称为TCP报文等。大多数包都由包头和信息组成:包头常常包括源地址和目的地址、包的长度和类型指示符等。

(2)封装

不同设备的对等层之间依靠封装和解封装来实现相互间的通信。封装就像洗完澡光着身子穿衣服,解封装就像洗澡前脱衣服,脱了一层又一层直到脱光。TCP/IP也是一种计算机数据打包和寻址的标准方法。在数据传送中,可以形象的理解为有两个信封,TCP和IP就像信封,要传递的信息被划分成若干段,每一段塞入一个TCP信封,并在上面记录分段信息,然后再塞入IP大信封里面。同理接收端一步一步拆开来并校验,若发现错误,TCP机制则会要求重发。因此,TCP/IP在互联网中几乎可以无差错地传送数据。

(3)数据段,数据包.数据帧

通信过程中,TCP/IP层与层之间有协议数据单元(Protocol Data Unit)来交换彼此的信息,确保网络设备之间能够通信。传输层在上层数据的基础上加上TCP报头得到的PDU叫做数据段(Segment),依次往下数据段传给网络层,并添加IP报头得到的PDU叫做数据包(Packet),数据包传给数据链路层添加报头得到的PDU称作数据帧(Frame)。最后Frame被转换为bit在物理层通过网络介质传播。

TCP/IP的基本介绍就到这里了,若有想要深入学习的同学,请不惧劳累的坚持学习下去。只有坚持下去了才会有收获。

参考:

https://zhuanlan.zhihu.com/p/29478691

Python Web学习笔记之TCP/IP协议原理与介绍的更多相关文章

  1. Python Web学习笔记之TCP/IP、Http、Socket的区别

    经常在笔试.面试或者工作的时候听到这些协议,虽然以前没怎么涉及过,但至少知道这些是和网络编程密不可分的知识,作为一个客户端开发程序员,如果可以懂得网络编程的话,他的作用和能力肯定会提升一个档次.原因很 ...

  2. 学习笔记之TCP/IP协议的重要性

    1. 随处可见的协议     在计算机网络与信息通信领域里,人们常常提及"协议"一词.互联网中常 用的具有代表性的协议有IP.TCP.HITP等. 而LAN(局域网)中经常使用的协 ...

  3. Python Web学习笔记之TCP、UDP、ICMP、IGMP的解释和区别

    TCP与UDP解释 TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据.TCP提供超时重发,丢弃重复数据, ...

  4. Python Web学习笔记之TCP的3次握手与4次挥手过程

    前言 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务.TCP提供一种面向连接的.可靠的字节流服务. 面向连接意味着两个使用TCP的应用(通常是一个客户和一个服 ...

  5. 学习笔记之TCP/IP协议分层与OSI參考模型

    1.协议的分层      ISO在制定标准化OSI之前,对网络体系结构相关的问题进行了充分的讨论, 终于提出了作为通信协议设计指标的OSI參考模型.这一模型将通信协议中必要 的功能分成了7层.通过这些 ...

  6. TCP/IP协议原理学习笔记

    昨天学习了杨宁老师的TCP/IP协议原理第一讲和第二讲,主要介绍了OSI模型,整理如下: OSI是open system innerconnection的简称,即开放式系统互联参考模型,它把网络协议从 ...

  7. TCP/IP协议原理与应用笔记18:构成子网和超网

    1. 引言: (1)类别IP编址(Classful IP)的缺陷 • 固定的3种IP网络规模      C类地址:少于255台主机的网络      B类地址:介于255~65535台主机的网络     ...

  8. TCP/IP协议原理与应用笔记17:IP编址(重点)

    1. IP地址(通用标识符) 对于同一个网络设备(主机或路由器)的不同网络连接,需要不同的IP地址进行标识 2. 主机标识符 主要有下面三种方式的主机标识方式: (1)Name:是什么,可读性强(了解 ...

  9. TCP/IP协议原理与应用笔记10:TCP/IP协议族

    1. 协议族视图如下:(这里我们列举重要的,并不是所有的) (1)网络接入层(数据链路层 和 物理层): 通过接入的物理网络的 功能 和 覆盖范围 进行分析划分为: •LANs :局域网(Local ...

随机推荐

  1. 从本机IIS中管理 远程服务器 IIS

    有时候,一般情况下,我们对服务器上 IIS 上的管理局限于 使用远程桌面:现在介绍一种,通过  本机 管理管理远程IIS 的方法! 1. 服务器端设置: 服务器管理器 ==>增加角色和功能向导= ...

  2. 浙江工业大学校赛 小M和天平

    小M和天平 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  3. 【转】MVC中的扩展点

    原文地址:http://www.cnblogs.com/xfrog/tag/MVC/      MVC中的扩展点(十)辅助方法   MVC中的扩展点(九)验证   MVC中的扩展点(八)模型绑定   ...

  4. iOS + Node + MySQL

    最近有空,又温习了一下Node ,配合Express 4.x可以很快的搭建一个简单的后台. Node比较适合频繁I/O,大量异步.至于更加复杂的后台逻辑还是用Java,个中滋味自己体验. Expres ...

  5. iOS-多语言版本开发(二)(转载)

    题记   iOS 多语言版本的开发(一) 中我们完成了让应用跟随系统语言进行切换,而用户自己却不能切换的功能,也基本上算是实现了多语言版本:可是,对于某些应用来说,实现跟随系统语言切换的同时, 也想要 ...

  6. Python实现简单HTTP服务器(二)

    实现简单web框架 一.框架(MyWeb.py) # coding:utf-8 import time # 设置静态文件根目录 HTML_ROOT_DIR = "./html" c ...

  7. PL/SQL EXCEPTION捕获抛出异常

    EXCEPTION抛出异常 处理除数为零异常 declare varA number; begin varA:=10/0; dbms_output.put_line('IT WILL NOT WORK ...

  8. 最强Mac电脑 工作站级别一体机iMac Pro公布

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/a2Ni5KFDaIO1E6/article/details/78795857 前不久传出消息,苹果将 ...

  9. 使用SolrJ代码导入,发布搜索服务

    搭建solr服务器:http://www.cnblogs.com/liyafei/p/8005571.html 一导入要搜索的字段 1:确定发布搜索的字段,sql语句 SELECT a.id, b.  ...

  10. qsv转换为mp4

    1:下载  装换工具:http://www.downza.cn/soft/27484.html 2:双击打开exe可执行程序. 3:添加要转换的文件,和转换后要存储的位置 4:开始转换,转换为flv格 ...