探索

网络编程入门基础知识

时间:2010-12-5 17:23:32  作者:热点   来源:焦点  查看:  评论:0
内容摘要:你打开浏览器输入一个网址,按下回车,页面跳出来了。这背后发生的事,比大多数人想象的要有意思得多。网络编程说到底就是让两台机器能互相说话,而这场对话的规则,早就被一套叫 TCP/IP 的东西定死了。 先

你打开浏览器输入一个网址,网络按下回车,编程页面跳出来了。入门这背后发生的基础事,比大多数人想象的知识要有意思得多。网络编程说到底就是网络让两台机器能互相说话,而这场对话的编程规则,早就被一套叫 TCP/IP 的入门东西定死了。

先聊 IP。基础每台联网的知识设备都有一个 IP 地址,IPv4 是网络四组数字,比如 192.168.1.10。编程这东西就像门牌号,入门数据包要知道往哪儿送,基础全靠它。知识但光有地址不够,数据包在路上可能丢、可能乱序,谁来保证完整性?TCP 上场了。TCP 负责把数据切成小块、编号、确认对方收到、丢了就重发。UDP 则不管这些,发出去就不管了,快但不可靠。视频通话用 UDP,因为丢几帧画面无所谓,卡顿才要命;传文件用 TCP,少一个字节都不行。

写代码的时候,你其实很少直接碰 TCP 和 UDP。更常见的是 HTTP——建立在 TCP 之上的应用层协议。浏览器发一个 GET 请求,服务器返回 HTML,就这么简单。请求长这样:

GET /index.html HTTP/1.1 Host: example.com

服务器回:

HTTP/1.1 200 OK Content-Type: text/html <html>...</html>

状态码 200 表示成功,404 是找不到,500 是服务器自己崩了。这些数字不是随便定的,每个都有明确含义。

Socket 是网络编程里绕不开的概念。你可以把它理解成一个插口——程序通过它读写数据,底层操作系统负责把数据送到网络上。Python 里建一个 TCP 服务端大概长这样:

import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('0.0.0.0', 8080)) s.listen(5) while True: conn, addr = s.accept() data = conn.recv(1024) conn.send(b'HTTP/1.1 200 OK\r\n\r\nHello') conn.close()

跑起来,浏览器访问 localhost:8080,就能看到 Hello。这就是一个最原始的 Web 服务器。当然,真实场景不会这么写,但原理一模一样。

有个坑我踩过好几次:阻塞。上面的 accept() 和 recv() 都会卡住程序,直到有连接或数据过来。单线程下,一个客户端占着,其他人都得等。解决办法要么用多线程,要么用异步 IO。Node.js 选了后者,所以它处理高并发很拿手。Python 的 asyncio 也是这个思路。

另一个容易糊涂的地方是端口。IP 定位到机器,端口定位到机器上的具体服务。80 是 HTTP,443 是 HTTPS,22 是 SSH。你自己写的服务别用这些,选 1024 以上的,比如 8080、3000。端口被占用是新手最常见的报错之一,换一个就行。

网络编程入门不需要啃完《TCP/IP 详解》。先动手写一个能收发消息的 socket 程序,再试试用 Flask 或 Express 搭个简单接口,回头再看三次握手、四次挥手,理解会深很多。我当初就是先跑通了代码,才真正明白为什么断开连接要四次——因为 TCP 是全双工的,两边得各自说再见。

别怕犯错。抓包工具 Wireshark 开着,看数据到底怎么走的,比看十篇文章都管用。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap