Python Web学习笔记之TCP/IP协议原理与介绍
Posted jetpropelledsnake
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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模型的第二层与第三层。
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通信中数据链路层最常见的形式,除此之外还有PPP、HDLC等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协议原理与介绍的主要内容,如果未能解决你的问题,请参考以下文章
TCP/IP协议原理与应用笔记27:网际协议(IP)之 选项(Options)