Linux网络编程

Linux网络编程介绍
1 什么是 Linux 网络编程?
网络编程即 编写通过 计算机网络 与其它程序进行通信的这类程序。网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--- 客户端和服务器端。网络程序是先有服务器程序启动,等待客户端的程序运行并建立连接.一般的来说是服务端的程序在一个端口上监听,直到有一个客户端的程序发来了请求。网络通信需要网络通信协议支持。Linux系统是通过 提供套接字(socket)来进行网络编程的.网络程序通过socket和其它几个函数的调用, 会返回一个用于通讯的文件描述符,我们可以将这个描述符看成普通的文件的描述符来操作,这就是linux的设备无关性的好处.我们可以通过向描述符读写操作实现网络之间的数据交流。

2 什么是TCP/IP协议?
TCP/IP 是供已连接因特网的计算机进行通信的通信协议。TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。 这4层分别为:
应用层:应用 程序间沟通的层,如超文本传输协议(HTTP)、简单电子邮件传输(SMTP)、 文件传输协议(FTP)、网络远程访问协议(Telnet)、域名系统(DNS)等。 
传输层:在此层中,它提供了 节点间的数据传送,应用程序之间的通信服务, 主要功能是数据格式化、数据确认和丢失重传等。如传输控制协议(TCP)、 用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。 
网络层:负责提供 基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。 
接口层(主机-网络层):接收 IP数据报并进行传输,从网络上接收物理帧,抽取IP数据报转交给下一层,对实际的 网络媒体的管理, 定义如何使用实际网络(如Ethernet、 Serial   Line 等)来传送数据。 

3 什么是TCP协议?(Transmission Control Protocol)
TCP是TCP/IP的 传输层协议。TCP向应用层提供了一种 可靠的面向连接的数据流传输服务。TCP协议是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。TCP将用户数据打包构成报文段;它发送数据后启动一个定时器;另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复数据。TCP通过三次握手来初始化的。
TCP的三次握手过程:
1 主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B ,向主机B 请求建立连接,通过这个数据段,主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我.
2 主机B 收到主机A的请求后,用一个带有确认应答(ACK)和同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事:我已经收到你的请求了,你可以传输数据了;你要用哪个序列号作为起始数据段来回应我
3 主机A收到这个数据段后,再发送一个确认应答,确认已收到主机B 的数据段:"我已收到回复,我现在要开始传输实际数据了。这样3次握手就完成了,主机A和主机B 就可以传输数据了.
三次握手简版:
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态, 等待服务器确认;SYN:同步序列编号
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成3次握手
3次握手的特点:
没有应用层的数据
SYN这个标志位只有在TCP建产连接时才会被置1
握手完成后SYN标志位被置0
TCP4的4次挥手过程:
1 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求
2 主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置1
3 由B 端再提出反方向的关闭请求,将FIN置1
4 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.
由TCP的三次握手和四次断开可以看出,TCP使用面向连接的通信方式,大大提高了数据通信的可靠性,使发送数据端和接收端在数据正式传输前就有了交互,为数据正式传输打下了可靠的基础。
名词解释
ACK  TCP报头的控制位之一,对数据进行确认.确认由目的端发出,用它来告诉发送端这个序列号之前的数据段都收到了.比如,确认号为X,则表示前X-1个数据段都收到了,只有当ACK=1时,确认号才有效,当ACK=0时,确认号无效,这时会要求重传数据,保证数据的完整性.
SYN  同步序列号,TCP建立连接时将这个位置1
FIN  发送端完成发送任务位,当TCP完成数据传输需要断开时,提出断开连接的一方将这位置1
TCP的包头结构:
源端口 16位
目标端口 16位
序列号 32位
回应序号 32位
TCP头长度 4位
reserved 6位
控制代码 6位
窗口大小 16位
偏移量 16位
校验和 16位
选项  32位(可选)
这样我们得出了TCP包头的最小长度,为20字节。

4 什么是UDP协议?(User Datagram Protocol)
UDP是一个简单的面向数据报的传输层协议,是一种面向无连接的不可靠传输协议,不需要通过3次握手来建立连接。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。
(1) UDP是一个非连接的协议,传输数据之前源端和终端不建立连接, 当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
(3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。
(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
我们经常使用 “ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
UDP的包头结构:
源端口 16位
目的端口 16位
长度 16位
校验和 16位

5 什么是IP协议?
IP协议位于网络层,它提供了不可靠的、无连接的数据报传输机制。TCP/IP是为了适应物理网络的多样性而设计的,而这种适应性主要是通过IP层来体现的。由于物理网络的多样性,各种物理网络的数据帧格式、地址格式之间的差异很大。为了将这些底层的细节屏蔽起来,使得采用不同物理网络的网络之间进行通讯,  TCP/IP分别采用了IP数据报和IP地址作为物理数据帧与物理地址的统一描述形式。这样IP向上层提供统一的IP数据报和统一的IP地址,使得各种物理帧及物理地址的差异性对上层协议不复存在。

6 什么是Socket?
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。
Socket接口设计者最先是将接口放在Unix 操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的 Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返 回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流式Socket (SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据 报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。

Linux网络编程常见面试题
1 TCP 和 UDP编程
TCP 传输控制协议,一种面向连接的协议,给用户进程提供 可靠的全双工的字节流 TCP 套接 口是 字节流 套接口(stream socket )的一种。
UDP :用户数据报协议,UDP 是无连接协议,UDP 套接口是 数据表 套接口(datagram socket )的一种。
TCP UDP区别 对比:
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
 
优缺点:
TCP: 1)提供认可的方式显示地创建和终止连接
  2)保证可靠的,顺序的,以及不重复的数据传输
  3)允许数据优先
缺: TCP在转移数据的时候,必须创建一个连接,增加开销,比UDP慢
UDP: 1)不要求保持一个连接
  2)没有因接收方认可收到数据包而带来的开销
 3)要求的网络带宽比TCP更小

TCT 和 UDP 编程步骤的不同:
TCP: 
TCP编程的服务器端一般步骤是: 
  1、创建一个socket,用函数socket(); 
  2、设置socket属性,用函数setsockopt(); * 可选 
  3、绑定IP地址、端口等信息到socket上,用函数bind(); 
  4、开启监听,用函数listen(); 
  5、接收客户端上来的连接,用函数accept(); 
  6、收发数据,用函数send()和recv(),或者read()和write(); 
  7、关闭网络连接; 
  8、关闭监听; 

TCP编程的客户端一般步骤是: 
  1、创建一个socket,用函数socket(); 
  2、设置socket属性,用函数setsockopt();* 可选 
  3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选 
  4、设置要连接的对方的IP地址和端口等属性; 
  5、连接服务器,用函数connect(); 
  6、收发数据,用函数send()和recv(),或者read()和write(); 
  7、关闭网络连接;

UDP:
与之对应的UDP编程步骤要简单许多,分别如下: 
  UDP编程的服务器端一般步骤是: 
  1、创建一个socket,用函数socket(); 
  2、设置socket属性,用函数setsockopt();* 可选 
  3、绑定IP地址、端口等信息到socket上,用函数bind(); 
  4、循环接收数据,用函数recvfrom(); 
  5、关闭网络连接; 

UDP编程的客户端一般步骤是: 
  1、创建一个socket,用函数socket(); 
  2、设置socket属性,用函数setsockopt();* 可选 
  3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选 
  4、设置对方的IP地址和端口等属性; 
  5、发送数据,用函数sendto(); 
  6、关闭网络连接;
 
2 TCP 三次握手过程和四次挥手(在上面什么是TCP中介绍) 

3 TCP,UDP,HTTP,SOCKET之间的区别
IP:网络层协议;
TCP和UDP:传输层协议;
HTTP:应用层协议;
SOCKET:TCP/IP网络的API。
TCP/IP代表传输控制协议/网际协议,指的是一系列协议。
TCP和UDP使用IP协议从一个网络传送数据包到另一个网络。 把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协议FTP这样的协议等。
 TCP和UDP是FTP,HTTP和SMTP之类使用的传输层协议。虽然TCP和UDP都是用来传输其他协议的,它们却有一个显著的不同:TCP提供有保证的数据传输,而UDP不提供。这意味着TCP有一个特殊的机制来确保数据安全的不出错的从一个端点传到另一个端点,而UDP不提供任何这样的保证。
HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。客户端使用Web浏览器发起HTTP请求给Web服务器,Web服务器发送被请求的信息给客户端。
记住,需要IP协议来连接网络;TCP是一种允许我们安全传输数据的机制,,使用TCP协议来传输数据的HTTP是Web服务器和客户端使用的特殊协议。
Socket 接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,用以开发TCP/IP网络上的应用程序。


4 其他问题:
1.TCP控流原理
利用 滑动窗口机制
原理:运用TCP报文段中的窗口大小字段来控制, 发送方的发送窗口不可以大于接收方发回的窗口大小。
该协议允许发送方在停止并等待确认前可以连续发送多个分组。
发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据传输。
2.TCP的拥塞控制
 a.慢启动阶段:发送方一开始便向网络发送多个报文段,直到达到接收方通告的窗口大小为止
 b.拥塞避免阶段:当发现超时或收到3个相同ACK确认帧时,则有丢包
 c.快速重传阶段
 d.快速恢复阶段
3.多线程如何同步    
线程:调度和执行的基本单位
1)线程数据
2)互斥锁
3)条件变量
4)信号量:它被用来控制对公共资源的访问
 
4.进程间的通讯方式:信号,信号量,消息队列,共享内存
进程:一个程序在一个数据集合上的一次运行过程
1) 管道:所有的UNIX实现都支持              缺点:只允许单向传输
2)系统IPC:功能强大,能在毫不相关的进程间通信             缺点:关键字使用内核标识
3) Socket:可以跨网络通讯
 
5.三次握手
1.客户端connect连接到server
2.server接受client请求之后,向client端发送一个消息确认
3.client向server发送,确认第2次握手。开始通信
 
6.Tcp四次挥手
1)断开连接的一端发送close请求,         time-wait
2)另一端接收到断开连接的请求之后需要对close进行确认,发送一个消息
3)发送了确认消息之后还要向对端发送close消息,关闭对对端的连接
4)最初发送断开连接的一端接到消息后,对消息确认
 
7.OSI参考模型
物理,数据链路,网络,传输,会话,表示,应用
 
 
网络安全:
1 加密算法:DES       数据加密标准,速度较快,适用于加密大量数据集合
  IDEA     国际加密算法
  AES
Windows编程 句柄:指使用的一个唯一的整数值,即一个4字节长的数值
 
2 strncpy 和 strcpt 的区别:
strcpt(目标串地址,源串的开始地址):从源串的开始到结尾,完全拷贝到目标串地址
strncpy     从源串的开始拷贝n个字符到目标地址,n大于源串长度时,遇到‘\0’结束,n小于源串长度时,到第n个字符结束,但不会在目标串尾补‘\0’
 
Linux2.6内核 同步日志的方法 rsync
 
IP地址中网络号的作用指定了主机的所需网络
系统当前已经加载所有文件系统在/etc/fstab 文件中得到反映
 
找出etc/my.conf 文件属于哪个包(package),可以执行()
rmp -qf /etc/my.conf

应用层:http smtp ftp telnet(网络远程访问协议) dns(域名系统).nfs
传输层:tcp udp
网络层:ip rip icmp
接口层:ethernet , serilal line
 
对进程来说,其虚拟内存的大小不受物理内存大小的限制
定义bash环境的用户文件是        bashrc & bash-profile
 
一个作业需要占用极大连续内存的内存管理是, 页式存储管理,段式存储管理
段页式存储管理
 
解决隐马模型中的预测问题的算法是 维特比算法
 
HTTP状态码:
200  服务器成功返回网页
404 请求的网页不存在
503 服务器暂时不可用
301 请求的网页已永久移动到新位置
 
通信管道以 自然字符流进行写入和读出
使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录 [-p] 
Linux执行ls,会引起read,execve系统调用
Nginx进程设置为cpu总核心数最佳
Linux中软连接和硬连接, 软连接可以跨文件系统进行连接
 
HTTP协议:
http 协议是一个应用层的协议
1)简洁,快速
2)支持客户 服务器模式
3)灵活,http允许传输任意类型的对象,正在传输的类型由Content-Type标记
4)限制每次连接只处理一个请求,可以节省时间
5)无状态协议,对事物的处理没有记忆能力
 
http协议与tcp协议的区别:
http在应用层          tcp在传输层
http是tcp的一个子协议,数据包在网络传输过程中,http被封在tcp包内
https 是ssl加密的
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值