TCP/IP协议
TCP/IPHTTPTCP/IPTCP/IPIP
TCP/IP
- 应用层
- 传输层
- 网络层
- 链路层
越往上越靠近用户,越往下越接近底层
链路层(网络接口层)
标头MACMAC广播broadcasting
网络层
IPIPMac
广播机制路由
网络层的作用是引进一套新的地址,使得我们能够区分不同的计算机是否属于同一个子网络。这套地址就叫做”网络地址”,简称”网址”。 那么,每台计算机出现了两个地址:Mac地址和网络地址。
- Mac地址是绑定在网卡上:将数据包发送到子网络的目标网卡
- 网络地址在网络管理员分配的:确定计算机所在的子网络
传输层
TCPUDP
产生
MACIPQQ
我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做”端口”(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。
- 0~65535,16个二进制组成
- 系统端口:0-1023;用户使用的端口1024开始
UDP协议
UDP标头数据65535
- 标头:发出端口号和接收端口号,8个字节
- 数据:具体的数据内容
TCP协议
UDPTCP TCP
TCPTCPIPTCP
应用层
TCPEmail、HTTP、FTPFTPDNSHTTP
术语
headdata64~151846-1500MAC48126位厂商编号+6位网卡流水号LANARP(address resolution protocol)IPIPMAC
IPIPIP0.0.0.0~255.255.255.255IPIPIPIPIPIP
socket
Socket是BSD UNIX的进程通信机制,通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。Socket可以理解为TCP/IP网络的API,它定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序
socket图解
SocketTCP/IP(Transmission Control Protocol/Internet Protocol) SocketTCP/IPSocketSocketSocket
socket编程
socketC/Ssocketgo
TCP服务端
TCP黏包
- 监听端口
- 接收客户端请求建立连接
- 创建goroutine处理连接
TCP客户端
一个TCP客户端进行TCP通信的流程如下:
- 建立与服务端的连接
- 进行数据的收发
- 关闭连接
粘包
为什么产生粘包
TCP
NagleNagle
解决办法
通过接收方对数据包进行封包和解包的操作。
- 封包:给一段数据加上包头,数据包就包含包头和包体两个部分。
- 包头的长度是固定的, 并且它存储了包体的长度。根据包头长度固定以及包头中含有包体长度的变量就能正确的拆分出一个完整的数据包。