zoukankan      html  css  js  c++  java
  • Python Web学习笔记之TCP/IP协议原理与介绍

    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参考模型中这两层并不是必需的。其中还有个四层模型的说法数据链路层与物理层表示成网络接口层。TCPIP体系结构最核心的部分就是上面三层:应用层、传输层、网络层。

    (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

  • 相关阅读:
    洛谷 P1194 飞扬的小鸟 题解
    洛谷 P1197 星球大战 题解
    洛谷 P1879 玉米田Corn Fields 题解
    洛谷 P2796 Facer的程序 题解
    洛谷 P2398 GCD SUM 题解
    洛谷 P2051 中国象棋 题解
    洛谷 P1472 奶牛家谱 Cow Pedigrees 题解
    洛谷 P1004 方格取数 题解
    洛谷 P2331 最大子矩阵 题解
    洛谷 P1073 最优贸易 题解
  • 原文地址:https://www.cnblogs.com/JetpropelledSnake/p/8903410.html
Copyright © 2011-2022 走看看