在我的博客阅读本文
文章目录
1. 基础
根据TCP/IP四层模型,在TCP场景下如下图:
其中,TCP头的信息:
2. 实战
2.1. 用Go写一个简单的TCP服务器与客户端
要分析TCP
协议,尽管可以直接使用一个http
的访问进行抓包,但是http
的过程中又涉及DNS
,ARP
等过程混淆我们,为了纯粹的分析TCP
协议,我们这里使用Golang
写了一个简单的9830端口的TCP
服务器与客户端,源代码简单展示如下:
服务端:
package server
import (
"fmt"
"net"
"os"
"strings"
"test/util"
)
func StartTCPServer(c chan<- string) {
listener, err := net.Listen("tcp", "localhost:9830")
if err != nil {
util.HandleError(err)
os.Exit(1)
}
defer listener.Close()
c <- "ready"
// 等待连接
conn, err := listener.Accept()
if err != nil {
util.HandleError(err)
os.Exit(1)
}
// 处理连接
handleRequest(conn)
}
func handleRequest(conn net.Conn) {
defer conn.Close()
var res strings.Builder
buf := make([]byte, 1024)
for {
n