学习视频 <— 众所周知B站是中国最大的学习网站 2333
第一部分:网络的基本概念
(详细内容参考计算机网络类教材即可,内容较多,这里不做赘述了)
第二部分:TCP/IP协议概述
(详细内容参考计算机网络类教材即可,内容较多,这里仅整理部分)
- TCP协议
TCP(传输控制协议Transmission Control Protocol)是重要的传输层协议,TCP提供一 种面向连接的、可靠的字节流服务。
TCP协议的目的是允许数据同网络上的另外站点进行可靠的交换。它能提供端口编号的译码,以识别主机的应用程序,完成数据的可靠传输。
TCP协议具有严格的内装差错检验算法确保数据的完整性。
TCP协议是面向字节的顺序协议,这意味着包内的每个字节被分配一一个顺序编号,并分配给每包一个顺序编号。 - Socket套接字
Socket(套接字)是一种通讯机制,它包含一整套的调用接口和数据结构的定义,它给应用进程提供了使用如TCP/UDP等网络协议进行网络通讯的手段。
Linux中的网络编程通过Socket接口实现,Socket既是一种特殊的IO,提供对应的文件描述符。一个完整的Socket都有一个相关描述 协议,本地地址,本地端口,远程地址,远程端口;每一个Socket有一个本地的唯一Socket,由操作系统分配。
在Linux网络编程中Socket本质上就是一个结构体
#include <sys/socket.h>
int socket(int domain, int type, int protocol)
返回成功返回描述符,出错返回-1
参数
●domain
AF_INET IPv4因特网域
AF_INET6 IPv6因特网域
AF_UNIX unix域
AF_UNSPEC 未指定
●type
SOCK_STREAM
流式的套接字可以提供可靠的、面向连接的通讯流。它使用了TCP协议。
TCP保证了数据传输的正确性和顺序性。
SOCK DGRAM
数据报套接字定义了一种无连接的服务,数据通过相互独立的报文进行传
输,是无序的,并且不保证可靠,无差错。使用数据报协议UDP协议。
SOCK_ RAW
原始套接字允许对低层协议如IP或ICMP直接访问,主要用于新的网络协议
实现的测试等。
SOCK_ SEQPACKET
长度固定、有序、可靠的面向链接报文传递
●protocol
通常为0,表示按给定的域和套接字类型选择默认协议。
Socket创建在内核中,若创建成功返回内核文件描述表中的socket描述符。
- 因特网地址结构
struct in_addr{
in_ addr_ _ts_ addr /*ipv4地址*/
};
struct sockaddr_ in {
short int sin_family; /* Internet地址族如AF_INET(主机字节序)*/
unsigned short int sin_port; /* 端口号,16位值(网络字节序)*/
struct in_addr sin_addr; /* Internet地址,32位IPv4地址(网络字节序)*/
unsigned char sin_zero[8]; /* 添0(为了格式对齐的填充位)*/
};