TCP/IP通俗易懂网络协议

昨晚在一个博主那里看懂一篇关于TCP/IP通俗易懂网络协议的文章,感觉写的非常不错,在这里就顺便做一下笔记吧。。。。

最简单的理解:TCP面向连接的,可靠的数据传输,建立连接需要三次握手,会造成delay

                        UDP是非连接的,不可靠的传输,UDP更

我感觉这个博主写的这个关TCP和UDP的解释非常好:从北京到杭州,TCP相当于修建了一条高速铁路(建立连接)再通车发货(传输数据),而UDP相当于寄快递,丢了不管(直接传输数据)

TCP/IP是什么

TCP/IP协议族是一组协议的集合,也叫做互联网协议族,实现互联网上主机之间的相互通信。TCP和IP只是其中的2个非常非常重要的协议,所以用TCP和IP命名这个互联网协议族。还包括其他的协议比如UDP,ICMP,IGMP等。

网络分层

互联网协议族TCP/IP四层划分:

éä¿ææç½ç»åè®®ï¼TCP/IPæ¦è¿°ï¼

TCP/IP自下到上划分为链路层网络层传输层应用层下层向上层提供能力,上层利用下层的能力提供更高的抽象。

1.链路层:也称网络接口层,包括操作系统的设备驱动程序和网卡,他们一起处理与传输媒介(光纤等)的物理接口细节。

2.网络层:也是IP层,负责处理IP数据报在网络中的传输,IP层传输的是IP数据报,借助路由表,把IP数据报从网络的一端传输到另一端,简而言之,IP实现包的路由传输,IP协议和路由器工作在网络层。

3.传输层,提供端到端之间的通信,包括提供面向连接和可靠的TCP,以及不可靠的UDP。看似TCP更好,但实际不是这样的,UDP因为不需要建连的开销,所以更快,应用更广。

4.应用层:跟应用有关,不同的应用解决不同的问题,需要不用的应用协议层。

éä¿ææç½ç»åè®®ï¼TCP/IPæ¦è¿°ï¼

链路层处理数据在媒介上的传输,以及主机与网卡,光线等打交道的细节。因为与硬件相关所以需要借助系统的驱动程序,链路层协议就是定义这些细节的,比如怎么把数据从网卡发送到光纤,采用什么格式的编码等,它解决数据在媒介上的表示流动问题。

光有链路层功能肯定是不够的,网络上有成千上万的机器,主机A与B通信,你不能将数据发到主机C,所以仿照现实,要为主机分配网络地址,通过IP地址去标识网络中的一台主机,发送一个数据包,需要正确路由到目的地,这就好比你从家到公司,要经过哪些路径,需要地图,而路由表就类似这张地图。IP解决的是数据包在网络中的传输路由的问题。

有了网络层就有了传输路由能力。因为IP报文在传输过程中可能会丢包,这样是不靠谱的,如果需要可靠的传输能力,便需要传输层基于IP层,提供更多的能力,TCP解决了可靠性的问题。具体而言,如果丢包了,TCP层会负责超时重传,它通过接收确认和重传机制保证了可靠传输。但有时候并不需要保证可靠性和顺序性,这便是UDP提供的。

再往上,便是应用层协议了,比如Http,又比如游戏服务器自定义协议,应用层协议通常基于TCP或者UDP做传输。

1.TCP和UDP是两种主要的传输层的协议。

2.IP是网络层的主要协议,TCP和UDP都需要利用IP协议进行传输。

3.ICMP是互联网协议控制报文协议,是IP的附属协议,IP层用它来与其他主机或路由器交换错误报文和其他重要信息。比如一个Packet经过某个路由器节点的时候,超过网络对Packet的长度限制,而又不分片,则会给发送端发送一个ICMP包报告错误信息,属于ICMP是用来辅助IP完成数据包传输的。

4.IGMP是Internet组管理协议,用来把一个包多播到多个主机。

5.ARP(地址解析协议)和RARP(逆地址解析协议)是用来转换IP层和链路层的地址,IP层使用IP地址,链路层使用Mac地址

封装

发送端在发送数据的时候,将原始数据按照协议格式加上一些控制信息,包装成可在网络上正确传输数据包的过程叫封装。

TCP/IP协议族是层层封装的,从应用层到链路层,每经过一层都要添加一些额外信息(首、尾部)。

  1. 用户数据经过应用程序加上应用程序首部,转给TCP层处理
  2. 经过TCP层加上TCP首部,产生TCP段(segment)
  3. TCP segment经过IP层再加上IP首部,产生IP数据包(datagram)
  4. IP datagram通过链路层,经以太网驱动程序处理后,加上以太网首部+尾部,产生以太网帧(frame),以太网帧的长度在46~1500之间

地址

互联网上每个接口都有一个唯一的网络地址,也叫IP地址,IP地址有IPv4和IPv6两个版本,IPv4是32位4字节的整数,每个字节(8bit)的取值范围是0~255,所以可以把4字节的IPv4用四个点分隔的byte值表示,比如140.252.13.88,每个十进制数值对应32位整数中的每个字节,这种表示法叫点分十进制表示法,很显然,点分十进制法和int32两种表示法之间很容易相互转换。

IPv4地址划分为ABCDE五类,32位地址表示的数值空间有限,难以为互联网上的所有联网设备分配独立的IP地址,所以便存在动态分配、共享、公网+内网地址转化(NAT)等问题,本质上是为了解决IP地址不够用的问题

IPv6使用128bit,2的128次方就非常大了,号称可以为地球上每粒沙子分配一个ip地址。

IP数据报(网络层)用IP地址、而以太网帧(链路层)则是用硬件(48位Mac)地址,ARP和RARP用于IP地址和硬件地址之间做映射(转换)。

端口

TCP/UDP采用16位端口号来识别(区分)应用,比如主机A向主机B发送了一个IP报,主机B的内核收到该IP报之后,应该交给哪个应用程序去处理呢?端口号就是用来干这个的,内核会维护端口号到应用程序之间的对应关系。

比较常用的应用层协议有约定的端口号,也就是知名端口号,而1024~5000之间的端口号是分配给TCP/IP临时用的,而大于5000的另做他用。也就是说,你用TCP方式去连网络服务器,本地为该socket分配的端口号会在1024~5000之间,这取决于操作系统的端口分配策略。

域名系统

域名系统(DNS)提供主机名字和IP地址之间的转换,比如www.baidu.com是一个域名,应用程序可以通过一个标准库函数(gethostbyname)来获得给定名字主机的IP地址,标准库函数(gethostbyaddr)实现逆操作。

ip地址是一串数字,含义不清、也不便于记忆,主机名含义更清晰,www.baidu.com你就很容易记住,这也是为什么存在IP地址还需要主机名的原因。

猜你喜欢

转载自blog.csdn.net/zl1107604962/article/details/90637023