Linux网络编程基础
1. Linux网络模型
① OSI七层模型和Linux四层模型
② 各种协议之间的关系及在Linux模型中的位置
③ 协议封装:各种协议处于一种层层封装的关系
(1)Ethernet
(2)IP
* IP主要有四个主要功能:数据传送,寻址,路由选择,数据报分段
* IP的主要目的是为数据输入、输出网络提供基本算法,为高层协议提供无连接的传送服务
* IP包由IP协议头和协议数据两部分构成
(3)TCP
* TCP是重要的传输层协议,目的是允许数据同网络上的其他节点进行可靠的交换。他能提供端口编号的译码,以识别主机的应用程序,而完成数据的可靠传输
* TCP协议具有严格的内装差错检验算法确保数据的完整性
* TCP是面向字节的顺序协议,这意味着包内每个字节被分配一个顺序号,并分配给每包一个顺序号
(4)UDP
* UDP也是传输层协议,他是无连接的不可靠的传输服务(执行速度比TCP快)
2. Linux中的网络编程由Socket实现,Socket是一种文件描述符
① Socket三种类型
(1)流式套接字(SOCK_STREAM):可以提供可靠的、面向连接的通讯,它使用TCP协议。TCP协议保证了数据传输的正确性和顺序性
(2)数据报套接字(SOCK_DGRAM):定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的并且不保证可靠、无差错,它使用数据报协议UDP
(3)原始套接字(SOCK_RAW):允许使用IP协议,主要用于新的网络的测试
② 网络地址
(1)sockaddr:在头文件#include <sys/socket.h>
中定义,缺陷是sa_data把目标地址和端口信息混在一起
struct sockaddr {
sa_family_t sin_family;//地址族
char sa_data[]; //14字节,包含套接字中的目标地址和端口信息
};
(2)sockaddr_in:在头文件#include<netinet/in.h>或#include <arpa/inet.h>
中定义,该结构体解决了sockaddr的缺陷,把port和addr 分开储存在两个变量中
struct sockaddr_in {
sa_family_t sin_family; //地址族(Address Family)
uint16_t sin_port; //16位TCP/UDP端口号
struct in_addr sin_addr; //32位IP地址
char sin_zero[]; //不使用
};
(3)sockaddr和sockaddr_in长度一样,都是16个字节,即占用内存大小一致,因此可以相互转化。sockaddr_in用于socket定义和赋值;sockaddr用于函数参数
③网络字节序(Big Endian【低位先传、高位后传】)
(1)htons:把unsigned short(2byte)类型从主机序转换到网络序
(2)htonl:把unsigned long(4byte)类型从主机序转换到网络序
(3)ntohs:把unsigned short(2byte)类型从网络序转换到主机序
(4)ntohl:把unsigned long(4byte)类型从网络序转换到主机序
3. TCP网络设计
https://www.cnblogs.com/wulei0630/p/9469276.html
4. UDP网络设计
https://www.cnblogs.com/wulei0630/p/9469407.html
5. 循环服务器与并发服务器
① 循环服务器:服务器在同一时刻只能响应一个客户端的请求
② 并发服务器:服务器在同一时刻可以响应多个客户端的请求
③ 并发服务器的思想是每一个客户的请求并不由服务器直接处理,而是由服务器创建一个子进程来处理
https://www.cnblogs.com/wulei0630/p/9479138.html
6. Linux网络编程常用函数原型及参数与功能详细介绍
① int socket(int domain, int type, int protocol)
功能:用来建立一个新的socket,也就是向系统注册、通知系统建立一通信端口
domain:指定使用何种协议类型,AF_INET(Ipv4网络协议)、AF_INET6(Ipv6网络协议)
type:套接字类型,SOCK_STREAM(提供双向连接且可靠的数据流)、SOCK_DGRAM(使用不连续不可信赖的数据包连接)
protocol:用来指定socket所使用的传输协议编号,通常设为0即可
② int bind(int sockfd, const struct sockaddr* addr, socklent_t len)
功能:将IP地址端口等信息绑定到套接字
③ int connect(int sockfd, cosnt struct sockaddr* addr, socklent_t len)
功能:在请求服务的进程套接字(客户端)和提供服务的套接字(服务器)之间建立一个连接
④ int listen(int sockfd, int backlog)
功能:等待连接
⑤ int accept(int sockfd, struct sockaddr* restrict addr, socklent_t * restrict len)
功能:获得连接请求并建立连接
⑥ ssize_t send(int sockfd, const void* buf, size_t nbytes, int flag)
功能:发送数据
⑦ ssize_t recv(int sockfd, void* buf, size_t nbytes, int flag)
功能:接收数据
⑧ssize_t sendto(int sockfd, const void* buf, size_t nbytes, int flags, const struct sockaddr* destaddr, socklen_t destlen)
功能:向指定的地址发送数据
⑨ ssize_t recvfrom(int sockfd, void* restrict buf, size_t len, int flags, struct sockaddr* restrict addr, socklen_t* restrict addrlen)
功能:从指定的地址接收数据
Linux网络编程基础的更多相关文章
- 服务器编程入门(4)Linux网络编程基础API
问题聚焦: 这节介绍的不仅是网络编程的几个API 更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系. 这节主要介绍三个方面的内容:套接字( ...
- Linux 高性能服务器编程——Linux网络编程基础API
问题聚焦: 这节介绍的不仅是网络编程的几个API 更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系. 这节主要介绍三个方面的内容:套接字(so ...
- 第5章 Linux网络编程基础
第5章 Linux网络编程基础 5.1 socket地址与API 一.理解字节序 主机字节序一般为小端字节序.网络字节序一般为大端字节序.当格式化的数据在两台使用了不同字节序的主机之间直接传递时,接收 ...
- Linux网络编程基础API
第5章 Linux网络编程基础API 探讨Linux网络编程基础API与内核中TCP/IP协议族之间的关系,并未后续章节提供编程基础.从3个方面讨论Linux网络API. socket地址API.so ...
- linux高性能服务器编程 (五) --Linux网络编程基础api
第五章 Linux网络编程基础api 1.主机字节序和网络字节序 字节序是指整数在内存中保存的顺序.字节序分为大端字节序.小端字节序. 大端字节序:一个整数的高位字节数据存放在内存的低地址处.低位字节 ...
- linux 网络编程 基础
网络编程基础 套接字编程需要指定套接字地址作为参数,不同的协议族有不同的地址结构,比如以太网其结构为sockaddr_in. 通用套接字: struct sockaddr { sa_family_t ...
- linux网络编程基础--(转自网络)
转自 http://www.cnblogs.com/MyLove-Summer/p/5215287.html Linux下的网络编程指的是socket套接字编程,入门比较简单. 1. socket套接 ...
- Linux 网络编程基础(4) -- Ping 的C代码实现
1.背景 在进行网络编程的时候,通常使用的协议有TCP协议,UDP协议.这些协议在简历套接字之初需要制定套接字的类型,比如TCP应当设置为 SOCK_STREAM, UDP对应的套接字应当设置为SOC ...
- Linux 网络编程基础(1)--网络相关的数据结构及转化函数
在Linux下进行网络编程,使用的语言一般为C.就个人感受而言,在Linux下进行网络程序的编写,重要的不是代码能力要多强,而是对Linux的网络编程思想的理解和对Linux网络数据结构的掌握.如果想 ...
随机推荐
- ViewPager的使用方法
首先是 导入jar包 下载地址:android-support-v4.jar 布局文件里添加viewPager布局 [html] view plaincopy <android.suppor ...
- Java元注解,简单案例
[注解] 程序中有 注释 和注解 * 注释:给开发人员. * 注解:给计算机看的. 注解使用:学习框架支持注解开发. [JDK提供的注解] @Override :描述方法的重写. @SuppressW ...
- webform 内置对象(页面间传值)
QueryString/URL传值 页面名后面加?变量名=值 有点:不占服务器内存. 缺点:保密性差:传递字符串长度有限. Response --相应请求对象 Response.Redirect ...
- 【摘自张宴的"实战:Nginx"】try_files指令
语法:try_files param1 [param2...paramN] fallback 默认值:none 使用环境: location 该指令用于告诉nginx测试每个文件是否存在,并且使用首先 ...
- SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。
熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...
- 面试题: java面试经历 已看1 抢红包如何分配每个人抢到的钱 有用 难点的面试题
2018.03.09 深圳乐唯科技 我看了下感觉这公司貌似挺不错的,面试官人也挺好的,氛围应该很不错,可惜我实力不足,唉,接续努力,下面把面试中印象较深的三个问题写一下. 面试问题1:数据库删除重复数 ...
- Apache Thrift with Java Quickstart(thrift入门及Java实例)
thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl ...
- ARC061E Snuke's Subway Trip
传送门 题目大意 已知某城市的地铁网由一些地铁线路构成,每一条地铁线路由某一个公司运营,该城市规定:若乘坐同一公司的地铁,从开始到换乘只需要一块钱,换乘其他公司的价格也是一块钱,问从1号地铁站到n号地 ...
- CF 1029E Tree with Small Distances
昨晚随便玩玩搞个div3结果浪翻了…… 强烈谴责D题hack数据卡常 考虑到本题中所要求的最短距离不会大于2,所以我们可以把所有结点到$1$的距离通过对$3$取模分类,考虑到直接自顶向下贪心不满足局部 ...
- Linux 终端命令行提示符的艺术--PS1进阶
话不多说,先瞅瞅我的命令行提示符(有点大): 图中命令行解释:┌[阳历日期/农历日期 时间]├[当前目录下目录数+当前目录下文件数][当前绝对目录]└[用户名@主机名-第几个终端 ╰_╯] 相关配置文 ...