一、TCP/IP简述

TCP/IP从字面异议看起来是指TCP和IP两种协议,实际上,它只是利用IP进行通信时必须用到的协议群的统称。具体的来说,IP或ICMP、TCP或UDP、Telnet或FTP、以及HTTP等都属于TCP/IP的协议。他们与TCP或IP的关系紧密,是互联网必不可少的组成部分。

TCP / IP 协议标准化过程具有两大特点,一是具有开放性,二是注重实用性(能否实际运用)。

标准化(Standardization)是指制定技术标准并就其达成一致意见的过程。 标准往往是一份文件,用于确定统一的工程、设计或技术规范、准则、方法、过程或惯例。

二、TCP/IP与OSI参考模型

OSI七层网络模型与TCP/IP四层网络协议模型

应用层(会话层以上的分层):针对特定应用的协议,把会话层表示层的功能集中到应用程序中实现。

表示层:设备固有数据格式和网络标准数据格式的转换。

会话层:通信管理。负责建立和断开通信连接,管理传输层以下的分层

传输层:有两个最具有代表性的协议 TCP和UDP。管理连个节点之间的数据传输,分清楚哪些程序与哪些程序在进行通信。负责可靠传输(确保数据被可靠地传送到目标地址)

互联网层(网络层):使用IP协议,基于IP地址转发分包数据。地址管理和路由选择,由操作系统提供

网络接口层(数据链路层):利用数据链路层进行通信,属于接口层。互连设备之间传送和识别数据帧

物理层(最底层):负责数据传输的硬件。以"0"、"1"代表电压的高低、灯光的闪灭,界定连接器和网线的规格。

三、TCP协议、滑动窗口机制和丢失重传机制

1. TCP首部中各个字段介绍:

Source Port 源端口号:

发送端端口号,字段长16位

Destination Port 目标端口号:

接收端端口号,字段长16位

Sequence Number 序列号:

字段长32位。指的是发送数据的位置。每发送一次数据,就会累加一次该字段大小。序列号不会从0或1开始,而是建立在计算机生成的随机数作为其初始值,通过SYN包传给接收端主机。然后再将每转发过去的字节数累加到初始值上表示数据的位置。此外,在建立连接和断开连接时发送的SYN包和FIN包虽然不携带数据,但是也会作为一个字结增加对应的序列号。

Acknowledgement Number 确认应答号:

字段长32位。是指下一次应该接收到的数据的序列号,发送端收到这个确认应答后可以认为在这个序号以前(-1)的数据都已经被正常接收了。

Data Offset 数据偏移:

字段长4个字节(32位)。表示TCP所传的数据从哪个位置开始计算,也可以看作是TCP首部的长度。

Reserved 保留:

字段长4位。为了以后扩展使用,一般为0,不为0该包也不会被丢弃。

Control Flag 控制位:

CWR:为1拥塞窗口缩小。

ECE:为1通知通信对方,从对方到这边的网络有拥塞。

URG(少用):紧急。当 URG = 1 时,发送应用进程就告诉发送方 TCP 有紧急数据要传送,于是发送方 TCP 就把紧急数据插入到报文段的最前面,而紧急数据后面的数据仍然是普通数据。紧急指针(Urgent Pointer)就是表示本报文段中紧急数据的字节数(紧急数据结束后就是普通数据),即紧急数据末尾在报文段中的位置。当所有紧急数据都处理完,TCP 就告诉应用层序恢复到正常操作。值得注意的是,即使窗口大小为 0,也可发紧急数据。

ACK:当ACK=1时,确认应答的字段变为有效。TCP规定除了最初见建立连接时SYN包之外该位必需设置为1。

PSH(少用):当PSH=1时,推送。提醒发送方立即发送这段数据;提醒接收方立即将数据投递到应用层;赶快发,赶快收。为0时表示不需要立即传,而实现进行缓存。

RST:该位为1时表示TCP连接中出现异常必须强制断开连接。当对方发送一个设置为1的RST包,就会使通信强制断开连接。

SYN:用于建立连接,SYN=1时表示希望建立连接

FIN:该位为1时,表示今后不会再有数据发送,希望断开连接。

Window Size 窗口大小:

字段长16位。用于通知从相同的TCP首部的确认应答号所指位置开始能接收的数据大小(8位字节为单位)。TCP不允许发送超过此处所示大小的数据。为0表示发送窗口探测,了解最新窗口大小。这个数据必须是1个字节。

Checksum 校验和:

TCP计算校验和时使用TCP伪首部(↑),为了让其全长为16位的整数倍,需要在数据部分的最后填充0。首先TCP校验和字段设为0,然后以16位为单位进行1的补码和计算,再将它们总和的1的补码放入校验和字段。

接收端接收到数据以后,从IP首部获取IP信息构造TCP伪首部,在进行校验和计算。由于校验和字段保存着除本字段以外的其他部分的和的补码值,因此如果计算校验和字段在内的所有数据的16位和以后,得出的结果是“16位全部为1”,说明收到数据是正确的。

目的:在有噪声干扰的通信途中如果出现错误,由数据链路的FCS检查出来。

Urgent Pointer 紧急指针:

字段长16位。只有在URG为1是有效。表示本报文段中紧急数据的指针。正确的来说,从数据部分的首位紧急指针所示的位置为止为紧急数据,紧急指针指出了紧急数据的末尾在报文段中的位置。

Options 选项:

选项字段用于提高TCP的传输性能。因为根据数据偏移(首部长度)进行控制,所以其长度最大为40字节。另外该选项字段尽量调整其为32位的整数倍。

2. TCP连接管理

发送端在数据通信之前,通过TCP首部内容来发送一个SYN包来作为建立连接的请求,然后等待确认应答。如果对端发送来确认应答,则认为可以进行数据通信;相反,确认应答未能达到,就不会进行通信。此外,在通信结束时会进行断开连接的处理(FIN包)。一个连接的建立与断开,正常过程至少需要来回发送7个包才能完成。下图是TCP的三次握手和挥手。

3. 以段为单位发数据

在建立TCP连接的同时,也可以确认发送数据包的单位,称其为最大消息长度MMS, Maximum Segment Size)。在理想的情况下,MMS正好是IP中不会被分片处理的最大数据长度。

TCP在发送大量数据时,是以MSS的大小将数据进行分割发送,重发时也是以MSS为单位。

MSS是在三次握手时,在两端主机之间被计算得出。发出建立连接时,会在TCP首部写入MSS字段,告诉对端接口能适应对应的MSS大小(如果某一方MSS被省略,取 536字节 = IP包长度(576) - IP首部(20)),然后从两者之间取较小的值使用。

4. 超时重发

指的是在重发数据之前,等待确认应答到来的那个特定时间间隔。如果超过这个时间仍未收到确认应答,发送端就会对数据进行重发。时间长短和网络环境有关。

5. 窗口控制机制

TCP以一个段进行一次确认应答的处理,这样的传输方式有一个缺点,那就是包的往返时间越长通信性能就越低。为了解决这个问题,TCP引入了窗口这个概念,即使在往返时间越长的情况下,他也能控制网络性能的下降。确认应答不是以每个分段,而是以更大的单位进行确认,转发的时间将会被大幅的缩短。也就是说,发送端主机发送了一个段后不必一直等确认应答,而是继续发送。

窗口大小就是指无需等待确认应答而可以继续发送数据的最大值。上图窗口最大的大小为4个段。这个机制使用了大量的缓冲区,对多个段同时进行确认应答的功能。

滑动窗口方式

如下图所示,亮起的窗口,这个窗口的数据可以在未接收到确认应答的情况下继续发送,在没有接收到确认应答之前必须在缓存区保留这部分数据。

在滑动窗口以外的部分包括尚未发送的数据以及已经确认对端已收到的数据,当数据发送出去以后能如期收到确认应答就可以不用在进行重发,此时数据就可以从缓存区中清除。收到确认应答的情况下,将滑动窗口滑动到确认应答中的序列号的位置。这样可以顺序地将多个段同时发送以提高通信性能。这种机制就被成为滑动窗口控制

5. 窗口控制与重传机制

在使用窗口控制中,如果出现段丢失该怎么办?

首先是考虑确认应答未能返回的情况,数据已经到对端,不需要重发,在没有使用窗口控制的时候都会被重发,而使用了窗口控制,某些确认应答即便丢失也无须重发。

其次考虑某个报文段丢失的情况下,发送端一只接收到序列号为1001的确认应答,这个确认应答好像在提醒发送端想接收1001开始的数据。因此在窗口比较大。又出现报文段丢失的情况下,同一个序列号的确认应答将会不断地返回。而发送方如果连续收到3次同一个确认应答,就会对相应的数据进行重发,这种机制比之前的超时管理更加高效,因此被称作高速重发控制。

四、TCP和UDP的相同点和不同点

两者相同点是传输层协议,为应用层提供信息载体,让应用程序之间实现通信。

TCP是一个面向连接的、可靠的协议,有流量控制、差错控制,传输效率比UDP高,它在实现了数据传输时的各种控制功能;当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议,不利于视频会议等场合使用。

UDP是无连接的、不具有可靠性的数据报协议,没有复杂的控制机制,只提供传输层最基本的功能,处理既简单又高效,在传输过程中丢包,也不负责重传,但能随时发送数据;当对网络通讯质量要求不高的时候,分组的数据较少,要求网络通讯速度能尽量的快,如多波、广播通信以及视频通信等多媒体领域,这时就可以使用UDP。

TCP/IP简述的更多相关文章

  1. Socket编程实践(1) --TCP/IP简述

    ISO的OSI OSI(open system interconnection)开放系统互联模型是由ISO国际标准化组织定义的网络分层模型,共七层, 从下往上为: OSI七层参考模型 物理层(Phys ...

  2. TCP/IP协议工作原理简述

    TCP/IP协议工作原理简述 // */ // ]]>   TCP/IP协议工作原理简述 Table of Contents 1 概要 2 应用层 3 传输层 4 网络层 5 链路层 1 概要 ...

  3. Http,Socket,TCP/IP 协议简述

    Http,Socket,TCP/IP 协议简述:https://blog.csdn.net/gordohu/article/details/54097841 TCP/IP协议,HTTP协议与webSo ...

  4. 简述osi七层模型和TCP/IP五层模型

    OSI七层模型 OSI七层模型的划分 应用层(Application).表示层(presentation).会话层(session).传输层(Transport).网络层(Network).数据链路层 ...

  5. TCP/IP数据加密传输及CA简述

    TCP/IP跨主机之间的通信数据封装发送的都是明文数据,现代通讯中会有安全问题. 三个安全问题 如:A发送消息给B的三个安全问题机密性:明文传输如:ftp,http,smtp,telnet等完整性:数 ...

  6. TCP/IP原理简述

    TCP/IP与OSI TCP/IP工作在第4层,在TCP/IP协议簇中,有两个不同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议),它们分别承载不同的应用.TCP协议提供可靠的服务,UDP ...

  7. TCP/IP概念简述

    这里所说的是广义上的TCP/IP协议群,而不是特指TCP和IP这两种具体的协议.既然是协议群,那么都有哪些协议呢?我们先不着急回答这个问题,因为要弄清楚这个问题,首先得了解另两件事,就是为啥要有这个协 ...

  8. 简述OSI七层协议模型、TCP/IP四层模型和五层协议之间的关系

    一.OSI七层模型 OSI七层协议模型主要是:应用层(Application).表示层(Presentation).会话层(Session).传输层(Transport).网络层(Network).数 ...

  9. TCP/IP协议(一)网络基础知识

    参考书籍为<图解tcp/ip>-第五版.这篇随笔,主要内容还是TCP/IP所必备的基础知识,包括计算机与网络发展的历史及标准化过程(简述).OSI参考模型.网络概念的本质.网络构建的设备等 ...

随机推荐

  1. Centos下Yum安装PHP7.0

    默认的版本太低了,手动安装有一些麻烦,想采用Yum安装的可以使用下面的方案: 1.检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包,先删除他们 ...

  2. Selenium系列5-XPath路径表达式

    Xpath介绍 XPath 使用路径表达式在 XML 文档中进行导航 XPath 使用路径表达式来选取 XML 文档中的节点或者节点集.这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似. ...

  3. python中模块与包

    #模块与包#在实际项目中,代码的行数可能上万,甚至上几十万,不可能在一个页面内完成,需要多个程序员通力写作#张三,李四,王五......每天收集大家的代码做一个版本,类似乐高积木一样,每个人负责一部分 ...

  4. python爬取疫情数据存入MySQL数据库

    import requests from bs4 import BeautifulSoup import json import time from pymysql import * def mes( ...

  5. ACID的实现原理

    引言 ACID是事务的特点也是必须的要求,只有保证ACID事务的执行才不会出错,分别是原子性.一致性.隔离性和持久性.我们知道典型的MySQL事务是这样执行的: start transaction 开 ...

  6. Java跨平台原理(字节码文件,虚拟机)

    介绍 C/C++语言都直接编译成针对特定平台机器码.如果要跨平台,需要使用相应的编译器重新编译. Java源程序(.java)要先编译成与平台无关的字节码文件(.class),然后字节码文件再解释成机 ...

  7. dede图片集关联的数据库用表:

    如果在本地的环境中,安装目录不在根目录,搬到外网上的时候,就需要对数据库里的图片路径数据进行字段替换: dede图片集关联的数据库用表:1.dede_addonimages 2.dede_arctin ...

  8. layui 各项配置

    第一.如何全部选中table中每一条记录 1.首先给table的父类设置一个唯一id *这种方式不推荐,效果比较差,推荐第2种方式 再搜索 alias-table div.layui-table-fi ...

  9. base64原理,使用场景

    Base64编码,是我们程序开发中经常使用到的编码方法.它是一种基于用64个可打印字符来表示二进制数据的表示方法.它通常用作存储.传输一些二进制数据编码方法!也是MIME(多用途互联网邮件扩展,主要用 ...

  10. Loj#6053-简单的函数【Min25筛】

    正题 题目链接:https://loj.ac/p/6053 题目大意 定义一个积性函数\(f(p^c)=p\ xor\ c\),求\(\sum_{i=1}^nf(i)\) 解题思路 异或这个东西不太好 ...