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

解决办法

通过接收方对数据包进行封包和解包的操作。

  • 封包:给一段数据加上包头,数据包就包含包头和包体两个部分。
  • 包头的长度是固定的, 并且它存储了包体的长度。根据包头长度固定以及包头中含有包体长度的变量就能正确的拆分出一个完整的数据包。