TCP/UDP基础协议

TCP网络套接字基础

1.套接字通用结构体

struct sockaddr sa_family_t sa_family; /*协议族*/ 
char data[14]; /*协议族数据*/ } 
typedef unsigned short sa_family_t; 所以sa_family 是个16字节的变量

2.通常sockaddr结构体只是作为参数, 但是为了更为详细的设置,tcp通常使用

struct sockaddr_in { 
    u8 sin_len; /*结构体长度,16*/ 
    u8 sin_family; /*协议族类型通常为AF_INET*/ 
    u16 sin_port; /*16为端口号,网络字节序*/ 
    struct in_addr sin_addr; /*ip地址32位*/ 
    char sin_zero[8]; /*保留*/ } 
struct in_addr { 
    u32 s_addr; /*ip地址32位,网络字节序*/ 
}

可以发现, sockaddr_in 和结构体sockaddr 大小是一致的,所以,可以使用

(struct sockaddr *)&sockaddr_in的形式来实现设置

用户层和内核层的交互过程

向内核传入数据的函数:send()、bind()

从内核得到数据的函数:accept()、recv()

#include <sys/types.h>
 #include<sys/socket.h> 
int socket(int domain, int type, int protocol); 
AF_UNIX 本地通讯 
AF_INET IPV4协议 
AF_INET6 IPV6协议 
type: SOCK_STREADM TCP字节流 
SOCK_DGRAM UDP连接 
SOCK_RAW 原始网络协议访问 
这里注意的是SOCK_DGRAM和SOCK_RAW可以使用sendto()和recvfrom()函数发接数据

具体的内核中实现在net/socket.c中

tcp服务器:socket() ---> bind()----> listen()--->accept()---->read()/write()---->close()

客户端: socket()----->connect()---->read()/write()------>close();

详细的实例可以参考:

Linux C : TCP/IP 和 网络编程_superSmart_Dong的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值