
网络编程
文章平均质量分 92
钟离默
半路出家的程序狗
展开
-
高级I/O函数
一、pipe函数pipe函数创建一个管道,实现进程间通信。#include <unistd.h>int pipe(int fd[2]);返回0成功,-1失败并设置errno。fd[0]只能用于读,fd[1]只能用于写。二、dup函数dup2函数#include <unistd.h>int dup(int oldfd);int dup2(int oldfd, int newfd);dup函数创建一个新的文件描述符,该新文件描述符和原有文件描述符oldfd指向相同原创 2021-08-20 16:03:59 · 146 阅读 · 0 评论 -
以太网帧格式 IP数据报格式 TCP数据报格式 MTU MSS
一、以太网帧格式下图摘自《TCP IP详解卷1:协议(第2版)》第3.2.2节以太网帧格式。以太网帧有最小和最大尺寸。最小的帧是64字节,要求数据区(有效载荷)长度(无标签)最小为48字节。当有效载荷较小时,填充字节(值为0)被添加到有效载荷尾部,以确保达到最小长度。传统以太网的最大帧长度是1518字节(包括4字节CRC和14字节头部)。选择这个值出于一种折中:如果一个帧中包括一个错误(接收到不正确的CRC校验),只需重发1.5kB以修复该问题。另一方面,MTU大小限制为1500字节。为了发送一个更原创 2021-08-18 17:32:56 · 10443 阅读 · 2 评论 -
C++网络编程(select、poll、epoll)
一、select多路IO转接int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);void FD_ZERO(fd_set *set); //清空文件描述符集合void FD_SET(int fd, fd_set *set); //将待监听的文件描述符添加到监听集合中void FD_CLR(int fd, fd_set *set); //将文原创 2021-08-16 15:43:41 · 1430 阅读 · 1 评论 -
网络模型与TCP/IP协议
一、OSI网络模型OSI(Open System Interconnect),即开放式系统互联。1.1 应用层OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。1.2表示层表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。原创 2021-08-16 15:18:49 · 222 阅读 · 1 评论 -
TCP三次握手与四次挥手
一、三次握手(建立连接)使用 connect() 建立连接时,客户端和服务器端会相互发送三个数据包,如下图所示:客户端调用 socket() 函数创建套接字后,因为没有建立连接,所以套接字处于CLOSED状态;服务器端调用 listen() 函数后,套接字进入LISTEN状态,开始监听客户端请求。这个时候,客户端开始发起请求:当客户端调用 connect() 函数后,TCP协议会组建一个数据包,并设置 SYN 标志位(TCP数据报结构),表示该数据包是用来建立同步连接的。同时生成一个随机数字 1转载 2021-08-13 16:24:30 · 203 阅读 · 0 评论 -
SOCK_STREAM与SOCK_DGRAM套接字
一、流格式套接字(SOCK_STREAM)流格式套接字(Stream Sockets)也叫“面向连接的套接字”,在代码中使用 SOCK_STREAM 表示。SOCK_STREAM 是一种可靠的、双向的通信数据流,数据可以准确无误地到达另一台计算机,如果损坏或丢失,可以重新发送。流格式套接字有自己的纠错机制,在此我们就不讨论了。SOCK_STREAM 有以下几个特征:数据在传输过程中不会消失;数据是按照顺序传输的;数据的发送和接收不是同步的(有的教程也称“不存在数据边界”)。可以将 S原创 2021-08-13 15:45:58 · 4537 阅读 · 1 评论