根据IP协议发送的数据,就叫做IP数据包 。IP数据包也分为”标头”和”数据”两个部分:”标头”部分主要包括版本、长度、IP地址等信息,”数据”部分则是IP数据包的具体内容 。IP数据包的”标头”部分的长度为20到60字节 , 整个数据包的总长度最大为65535字节 。
传输层有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信 。但问题是同一台主机上会有许多程序都需要用网络收发数据,比如QQ和浏览器这两个程序都需要连接互联网并收发数据,我们如何区分某个数据包到底是归哪个程序的呢?也就是说 , 我们还需要一个参数 , 表示这个数据包到底供哪个程序(进程)使用 。这个参数就叫做”端口”(port),它其实是每一个使用网卡的程序的编号 。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据 。
“端口”是0到65535之间的一个整数,正好16个二进制位 。0到1023的端口被系统占用,用户只能选用大于1023的端口 。有了IP和端口我们就能实现唯一确定互联网上一个程序,进而实现网络间的程序通信 。
我们必须在数据包中加入端口信息,这就需要新的协议 。最简单的实现叫做UDP协议,它的格式几乎就是在数据前面,加上端口号 。UDP数据包 , 也是由”标头”和”数据”两部分组成:”标头”部分主要定义了发出端口和接收端口 , ”数据”部分就是具体的内容 。UDP数据包非常简单,”标头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包 。
UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出 , 无法知道对方是否收到 。为了解决这个问题 , 提高网络可靠性,TCP协议就诞生了 。TCP协议能够确保数据不会遗失 。它的缺点是过程复杂、实现困难、消耗较多的资源 。TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度 , 以确保单个TCP数据包不必再分割 。
应用层应用程序收到”传输层”的数据 , 接下来就要对数据进行解包 。由于互联网是开放架构,数据来源五花八门,必须事先规定好通信的数据格式,否则接收方根本无法获得真正发送的数据内容 。”应用层”的作用就是规定应用程序使用的数据格式,例如我们TCP协议之上常见的Email、HTTP、FTP等协议,这些协议就组成了互联网协议的应用层 。
如下图所示,发送方的HTTP数据经过互联网的传输过程中会依次添加各层协议的标头信息 , 接收方收到数据包之后再依次根据协议解包得到数据 。
文章插图
二 socket编程Socket是BSD UNIX的进程通信机制 , 通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄 。Socket可以理解为TCP/IP网络的API,它定义了许多函数或例程 , 程序员可以用它们来开发TCP/IP网络上的应用程序 。电脑上运行的应用程序通常通过”套接字”向网络发出请求或者应答网络请求 。
socket图解Socket是应用层与TCP/IP协议族通信的中间软件抽象层 。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket后面,对用户来说只需要调用Socket规定的相关函数,让Socket去组织符合指定的协议数据然后进行通信 。
文章插图
- Socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络请求
- 常用的Socket类型有两种:流式Socket和数据报式Socket,流式是一种面向连接的Socket,针对于面向连接的TCP服务应用,数据报式Socket是一种无连接的Socket,针对于无连接的UDP服务应用
- TCP:比较靠谱,面向连接,比较慢
- UDP:不是太靠谱,比较快
三 TCP编程Go语言实现TCP通信TCP协议TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,因为是面向连接的协议,数据像水流一样传输,会存在黏包问题 。
TCP服务端一个TCP服务端可以同时连接很多个客户端,例如世界各地的用户使用自己电脑上的浏览器访问淘宝网 。因为Go语言中创建多个goroutine实现并发非常方便和高效,所以我们可以每建立一次链接就创建一个goroutine去处理 。
推荐阅读
- gorm中的关联操作详解
- OnionArch - 采用DDD+CQRS+.Net 7.0实现的洋葱架构
- 摩托罗拉edge s评测_摩托罗拉edge s详细评测
- 一什么千什么的成语 一什么千什么成语
- iQOOz5和iQOOz3的区别_iQOOz5和iQOOz3有哪些差距
- iqoo7的monster模式有什么用_iqoo7的monster的用处是什么
- 对讲机怎么用对讲机使用方法图解(对讲机喊话键下面俩键干什么用的)
- 怎么删除微信上已经添加的朋友(怎么删除微信中已添加的朋友)
- Go中的闭包、递归
- Spring 深入——IoC 容器 01