昨晚在一个博主那里看懂一篇关于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自下到上划分为链路层网络层传输层应用层下层向上层提供能力,上层利用下层的能力提供更高的抽象。

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

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

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

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

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

光有链路层功能肯定是不够的,网络上有成千上万的机器,主机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地址还需要主机名的原因。

TCP/IP通俗易懂网络协议相关推荐

  1. 计算机网络(OSI、TCP/IP、网络协议、常见网络设备工作原理)

    目录 OSI模型 TCP/IP模型 网络协议 IP协议 IP数据报格式 IP数据报分片 IPv4地址 NAT协议 ARP/RARP协议 ARP RARP DHCP协议 ICMP协议 ICMP差错报告报 ...

  2. CNT-OSI七层参考模型和TCP/IP四层网络协议

    1.计算机网络体系 计算机网络体系结构是指计算机网络层次结构模型,它是各层协议和层次之间的端口集合.在计算机网络中实现通信必须依靠网络通信协议. OSI七层参考模型:目前广泛采用的是国际标准化组织IS ...

  3. Linux C : TCP/IP 和 网络编程

    目录 一.IP主机和IP地址 二.IP数据包格式 三.TCP/IP在网络中的数据流 四.套接字编程 4.1 创建套接字 4.2绑定socket和端口号 4.3.UDP 套接字 4.4 TCP 套接字 ...

  4. http与https与socket tcp/IP与UDP 协议等

    网络由下往上分为:   物理层--                       数据链路层-- 网络层--                       IP协议 传输层--               ...

  5. OSI七层网络结构图与TCP/IP五层网络结构图

    一. OSI七层网络结构图与TCP/IP五层网络结构图 又称<OSI七层网络模型与TCP/IP四层网络模型>. (1)OSI七层模型 OSI中的层 功能 TCP/IP协议族 应用层 文件传 ...

  6. 常见TCP/IP、HTTP协议以及三次握手和四次挥手

    面试常见TCP/IP.HTTP协议以及三次握手和四次挥手 IP(Internet Protocol):网际协议 IP协议是用于将多个包交换网络连接起来的,它在源地址和目的地址之间传送一种称之为数据包的 ...

  7. 网络知识梳理--OSI七层网络与TCP/IP五层网络架构及二层/三层网络

    作为一个合格的运维人员,一定要熟悉掌握OSI七层网络和TCP/IP五层网络结构知识. 废话不多说!下面就逐一展开对这两个网络架构知识的说明: 一.OSI七层网络协议 OSI是Open System I ...

  8. OSI七层网络、TCP/IP五层网络架构、二层/三层网络

    一.OSI七层网络协议 OSI是Open System Interconnect的缩写,意为开放式系统互联. OSI参考模型各个层次的划分遵循下列原则: 1)根据不同层次的抽象分层 2)每层应当有一个 ...

  9. TCP/IP篇(1)--协议模型

    TCP/IP参考模型分为四个层次:应用层.传输层.网络互连层和主机到网络层. (1)主机到网络层:实际上TCP/IP参考模型没有真正描述这一层的实现,只是要求能够提供给其上层-网络互连层一个访问接口, ...

最新文章

  1. C++中mutable、volatile关键字
  2. 丰田pcs可以关闭吗_别只知道开不坏,现在的丰田还有这些厉害绝招!
  3. Docker logs 命令——查看docker容器日志
  4. ASP.NET Literal控件用法
  5. 使用web.xml方式加载Spring时,获取Spring context的两种方式
  6. 大数据工作由哪几部分组成?
  7. 破解校园网锐捷无法开热点问题
  8. Xshell远程连接配置 Ubuntu 18.04.6 + Anaconda + CUDA + Cudnn + Pytorch(GPU+CPU)
  9. linux如何后台执行程序?
  10. 时间复杂度 O(1),O(n),O(n^2),O(logn),O(nlogn) 详解
  11. 谷歌自动驾驶正式入华,能否掀起“鲶鱼效应”?
  12. 4. js移动端点触(tap)事件
  13. .NET Core 2.2 IIS网站出现HTTP503无法访问解决方法
  14. Mogrt是什么?如何在PR中安装.Mogrt文件并使用 Premiere基本图形MOGRT文件
  15. 关于数据结构和算法的面试题
  16. Asp.Net Core 2.1 取消HTTPS配置
  17. 数据库学习 (一):数据库系统概述
  18. 【OpenCV 例程 300篇】222. 特征提取之弗里曼链码(Freeman chain code)
  19. 全球仅10%的开发者从不加班;淘宝回应用户账号被禁用 980 年;苹果宣布首次以官方形式参与天猫618折扣活动...
  20. ”从生命起源到智慧宇宙“全文(英文论文)

热门文章

  1. CVPR 2020 Modality Shifting Attention Network for Multi-modal Video Question Answering
  2. fedora30 桌面图标_Linux桌面上的创新:Fedora 30的新功能
  3. 污染源智能管控系统概要设计说明书
  4. 电线电缆型号大全,名称缩写及应用
  5. 电机控制器遇到电磁兼容问题,如何定位分析整改
  6. 老杨说运维 | 企业数字化转型中,统一监控的必要性
  7. 简单实现一个 js 多线程
  8. 第094讲: Pygame:飞机大战5 | 学习记录(小甲鱼零基础入门学习Python)
  9. 5分钟制作H5发光字表白并分享给她
  10. AES加密算法原理及java android实现