信息安全系统设计与实现学习笔记11
一、知识点归纳以及自己最有收获的内容
1. 知识点归纳
第13章 TCP/IP和网络编程
-
TCP/IP协议
- TCP/IP传输协议,即传输控制/网络协议,是网络使用中最基本的通信协议。它对互联网中各部分进行通信的标准和方法进行了规定。TCP/IP传输协议是保证网络数据信息及时、完整传输的重要协议。
- 严格来说,TCP/IP传输协议是一个四层的体系结构,包括应用层、传输层、网络层和数据链路层。
- 主要协议:
- 应用层:Telnet、FTP、SMTP 等,用于接收来自传输层的数据或者按不同应用要求与方式将数据传输至传输层。
- 传输层:UDP、TCP,用于实现数据传输与数据共享。
- 网络层:ICMP、IP、IGMP,负责网络中数据包的传送。
- 网络访问层(数据链路层):ARP、RARP,提供链路管理和错误检测等功能。
-
IP主机和IP地址
- IP主机:支持TCP/IP协议的计算机或设备,由32位的IP地址标识。IP地址通常用点分十进制表示,如:134.121.64.1。
- IP地址:分为NetworkID字段和HostID字段,根据划分分为A~E类。IP地址标识数据包的发送和接收。
-
IP协议
- 用于在IP主机之间发送/接收数据包。IP尽最大努力运行,不能保证数据包的可靠性和顺序传送。
-
UDP/TCP
- UDP(用户数据报协议):在IP上运行,用于发送/接收数据报,快速高效但不保证可靠性。
- TCP(传输控制协议):面向连接的协议,在IP上运行,保证可靠的数据传输。
-
套接字API
- TCP/IP网络编程的用户界面,由一系列C语言库函数和系统调用组成,用于实现网络编程。
- 套接字地址结构:
struct sockaddr_in { sa_family_t sin_family; // AF_INET for TCP/IP in_port_t sin_port; // port number struct in_addr sin_addr; // IP address }; struct in_addr { uint32_t s_addr; // IP address in network byte order };
- 套接字API函数:
int socket(int domain, int type, int protocol)
int bind(int sockfd, struct sockaddr *addr, socklen_t addrlen)
- UDP套接字:
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
- TCP套接字:
int listen(int sockfd, int backlog)
,int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
-
字节排序函数
- 小端和大端(内存中存储两个字节有两种方法):
- 小端(little-endian):低序字节存储在起始地址。
- 大端(big-endian):高序字节存储在起始地址。
- 程序输出字节序:
#include "unp.h" int main(int argc, char **argv) { union { short s; char c[sizeof(short)]; } un; un.s = 0x0102; printf("%s:", CUP_VENDOR_OS); if (sizeof(short) == 2) { if (un.c[0] == 1 && un.c[1] == 2) printf("big-endian\n"); else if (un.c[0] == 2 && un.c[1] == 1) printf("little-endian\n"); else printf("unknown\n"); } else printf("sizeof(short)=%d\n", sizeof(short)); exit(0); }
- 小端和大端(内存中存储两个字节有两种方法):
-
字节操纵函数
bzero
:将目标字节串指定数目的字节置为0,常用于初始化套接字地址结构。bocpy
:将指定数目的字节从源字节串移动到目标字节串。bcmp
:比较两个任意的字节串,若相同返回值为0,否则返回非0。memset
:将目标字节串指定数目的字节置为指定值。mencmp
:比较两个任意的字符串,若相同为0,否则返回非0值,取决于第一个不等的字节。
二、支持IPv4的inet_pton函数的简单定义:
int inet_pton(int family, const char *strptr, void *addrptr) {
if (family == AF_INET) {
struct in_addr in_val;
if (inet_aton(strptr, &in_val)) {
memcpy(addrptr, &in_val, sizeof(struct in_addr));
return 1;
}
return 0;
}
errno = EAFNOSUPPORT;
return -1;
}
标签:11,字节,int,IP,信息安全,struct,笔记,TCP,addr
From: https://www.cnblogs.com/gd1220/p/17857530.html