linux -13-网络编程-基础及TCP/UDP

1.1 网络常识

1)网络的7层网络协议

ISO按照逻辑划分出来7层网络协议

应用层:和应用程序打交道的,进行数据的交互

表示层:将应用程序中的数据按照规则封装起来。

会话层:聊天,对话的意思,控制会话的开始和结束等

传输层:用于数据交换的通道

网络层:通过具体的网络传送数据

数据链路层:对具体的信息进行编码转换等等。

物理层:路由器和交换机等

2)常见的协议

TCP 传输控制协议,面向连接的协议

UDP 用户数据报协议 ,面向无连接的协议

IP  网络协议 ,信息传递机制

3)IP地址

IP地址是Internet中唯一的地址标识,一般都是一个32位的整数(IPV4),也有128位整数(ipv6)

将ip地址中的每一个字节转换为十进制,采用.隔开,这种IP地址的表示方法叫做:点分十进制表示法

IP地址分为网络号和主机号,将ip地址分为以下四类地址:

A类:0 + 7位网络地址 + 24位本地地址

B类:10 +14位网络地址 +16位本地地址

C类:110+21为网络地址 +8位本地地址

D类:1110+28位多播地址

子网掩码是采用点分十进制表示法进行表示,主要用于指名一个IP地址中哪些位表示网络地址,以及哪些位表示主机地址,不能单独使用,必须和IP地址搭配使用。

如:IP地址:192.168.182.48

子网掩码:255.255.255.0  &

-------------------------------

192.168.182网络地址

其中48表示主机号

可以判断两个不同的IP地址是否在同一个子网中

MAC地址:电脑上的网卡地址,物理地址

MAC地址也就是物理地址,也就是网卡的地址,可以通过绑定Mac地址来限制上网的设备

4)端口号

IP地址可以定位具体的主机,端口号可以用于定位具体的某个进程

端口号是unsigned short类型,范围是 : 0 - 65535,其中0 - 1024的端口号一般被系统占用,比如:HTTP:80 FTP:21

如:

0x12345678

=> 按照内存地址从低到高依次存放:

0x12    0x34   0x56   0x78

低位内存地址存放高位数据:大端系统

低位内存地址存放低位数据:小端系统

字节序只要有两种:网络字节序 和 主机字节序

主机字节序一般表示当前主机的字节顺序

网络字节序一般表示不同主机之间的统一字节序




2.0

使用socket进行通信,soket -套接字,实际上就是一个逻辑通信载体

2.1一对一通信的模型

服务器端:

1)创建socket,使用socket函数

2)准备一个通信地址,使用结构体类型

3)将socket和通信地址进行绑定,使用bind函数

4)进行通信,使用read/write函数

5)关闭socket,使用close函数

客户端:

1)创建socket,使用socket函数

2)准备一个通信地址,使用结构体类型

3)将socket和通信地址进行连接,使用connect函数

4)进行通信,使用read/write函数

5)关闭socket,使用close函数

2.2 相关函数的介绍1)socket函数

int socket(int domain,int type,int protocol)

第一个参数:域/协议簇 AF_UNIX AF_LOCAL ----本地通信

AF_INET --使用IPV4进行通信

AF_INET6 --使用IPV6进行通信

第二个参数:指定协议

SOCK_STREAM --使用数据流的形式通信,TCP协议

SOCK_DGRAM --使用数据报的形式通信,UDP协议

第三个参数:指定特殊的协议,直接给0

返回值:成功会返回文件描述符,失败会返回-1

函数功能:创建用于交流的端点,通信载体

2)bind函数

int bind(int sockfd,const struct sockaddr *addr,socklen_t addrlen_);

第一个参数:socket描述符

第二个参数:准备的通信地址

第三个参数:通信地址的大小

返回值:成功返回0,失败返回-1

函数功能:将准备的通信地址和sockt进行绑定

3)准备的通信地址类型

//a 通用的通信地址s

struct sockaddr{

sa_family_t sa_family;//域,协议簇

char sa_data[14];//地址

};

注意:此结构体一般很少直接使用,而绝大多数都是作为函数的参数去使用

//b 本地通信的结构体类型#include

struct sockaddr_un

{  

sa_family sun_family;//协议簇 

char sun_path[];//socket文件的路径};

//c 网络通信的结构体类型

struct sockaddr_in

{

  sa_family_t sin_family;//协议簇

AF_INETin_PORT_T sin_port;//端口号

struct in_addr sin_addr://ip地址}

struct in_addr

{

in_addr_t s_addr;//ip地}

4)connect函数

int connect(int sockfd,const struct sockaddr *addr,socklen_t addrlen);

函数的功能类似于bind函数

5)htons函数#includeuint32_t htonl(uint32_t hostlong);

unit32_t ntohl(uint32_t netlong);

unit16_t ntohs(uint16_t netshort);

unit16_t htons(uint16_t hostshort);

功能:htons函数表示将short类型参数的主机字节序,转换为网络字节序,通过返回值返回转换之后的结果

6)inet_addr函数

in_addr_t inet_addr(cons char *cp)

功能:将参数指定的点分十进制形式的ip地址转换网络字节序的整数地址

---------------------------------------------------------------------------------------------------------

2.3基于TCP通信模型

服务器端:

1)创建socket,使用socket函数,SOCK_STREAM

2)准备通信地址,struct sockaddr_in结构体

3)使用绑定,使用bind函数

4)监听,使用listen函数

5)接收客户端的连接请求,使用accept函数

6)进行通信,使用read/write函数

7)关闭socket,使用close函数

客户端:

1)创建socket

2)准备通信地址

3)进行连接

4)进行通信

5)关闭socket

2.4 相关函数

1)listen函数

int listen(int sockfd,int backlog);

第一个参数:socket描述符

第二个参数:允许访问的最大连接数,即将连接的队列最大值

返回值:成功返回0,失败返回-1

功能:监听socket上的连接请求

2)accept函数

int accept(int sockfd,struct sockaddr* addr,socken_t *addrlen);

第一个参数:sockt描述符

第二个参数:用于保存所接受的客户端的地址

第三个参数:地址的大小

返回值:成功返回新的文件描述符,失败返回-1

函数功能:响应客户端的连接请求

注意:使用socket函数创建的描述符主要用于等待客户端的连接,不参与信息的交互,而accept函数返回的描述符主要用于针对当前客户端的信息交互通道

3)inet_ntoa函数

char *inet_ntoa(struct in_addr in);

功能:将网络通信结构体中的第三个成功类型的ip地址 转换 字符串形式的ip地址

------------------------------------------------------------------------------------------------------

UDP

1.1概念

TCP 传输控制协议 ,面向连接的协议

UCP 用户数据报协议 非面向连接的协议

1.2区别

1)TCP是一种面向连接的协议,在通信的全程保持连接

优点:可以保证数据的完整性和安全性以及准确性,并且可以重发一切数据

缺点:服务器压力比较大,资源占用率比较高

2)UDP是一种非面向连接的协议,在发送数据时连一下,不包吃全程连接

优点是:服务器压力比较小,资源占用率比较低

缺点是:不保证数据的安全性和完整性以及准确性

1.3 基于UDP通信的模型:

服务器:

1)创建socket,使用socket函数

2)准备通信地址,使用struct sockaddr_in结构体

3)绑定socket和通信地址,使用bind函数

4)通信,使用read/write/sendto/recvfrom函数

5)关闭socket函数,使用close函数

客户端:

1)创建socket,使用socket函数

2)准备通信地址,使用struct sockaddr_in结构体

3)进行通信,使用read/write/recvfrom/sendto函数

4)关闭socket,使用close函数

1.4相关函数的介绍1)sendto函数

ssize_t send(int sockfd,const voif *buf,size_t len,int flags);

ssize_t sendto(int sockfd,const void *buf,size_t len,int flags,const struct sockaddr *dest_addr,socklen_t addrlen);

第一个参数:socket描述符

第二个参数:将要发送的数据的首地址

第三个参数:发送的数据大小

第四个参数:发送的方式,默认给0

第五个参数:发送到的目标地址

第六个参数:目标地址的大小

返回值:成功返回发送的数据大小,失败返回-1

函数功能:向指定的目标地址发送数据

注意:send函数相对于sendto少了目标地址参数,一般用于tcp通信中

2)recvfrom函数

ssize_t recv(int sockfd,void *buf,size_t len,int flags);

ssize_t recvfrom(int sockfd,void *buf,size_t len,int flags,struct sockaddr *src_addr,socklen_t *addrlen);

第一个参数:socket描述符

第二个参数:存放数据的缓冲区首地址

第三个参数:读取的数据大小

第四个参数:默认给0即可

第五个参数:存放客户端地址信息的

第六个参数:客户端地址的大小

返回值:成功返回读取的数据大小,失败返回-1

函数功能:接受指定的消息

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容