目录
[5、ping Ip地址](#5、ping Ip地址)
[(1)查看端口的命令 netstat -natp](#(1)查看端口的命令 netstat -natp)
网络编程解决是跨主机的进程间通讯
1、网络
把不同的主机链接起来构成了网络
简单网络示意图
2、互联网
把网络和网络连接起来就是互联网
3、ip地址
IP地址(我在哪里):在网络中需要通讯就需要把网络标识出来
给因特网上的每一主机(路由器)的每一个接口分配的一个在全世界范围内唯一的标识符
(1)ipv4:
四个字节,每个字节8位,共32位,用十进制表示
(2)ipV6:1
28位,用:分成8段,每个段16位,用4个16进制数表示
(3)IP地址的组成:
IP地址组成
有了IP地址寻址特别方便
IP地址不是唯一的,会随着网络环境的变化而变化
(4)Linux查看IP地址:ifconfig
4、mac地址
Mac地址(我是谁):计算的网卡固化的地址,物理地址,硬件地址,精确定位的一个信息,网络设备的厂家直接烧在网卡上的,理论上mac地址是唯一的,但是因为mac地址可以通过程序修改,所以也又可能会重复,只要不手动更改,他就是全世界唯一的,48位。
5、ping Ip地址
查看是否联通
6、端口(软件层面)
主机上应用程序的一个代号,表示的是一个进程,通讯是进程之间的
(1)查看端口的命令 netstat -natp
7、套接字地址
套接字对外提供的是一个进程间通信的能力(跨越主机),不跨主机也能做
ip(ip地址)+port(端口)
8、协议
规定,共同遵守的一个规则,在什么场合下使用什么样的协议
9、tcp协议
面向连接 可靠的流式服务
10、网络分层模型
OSI七层模型和tcp/ip协议族体系四层结构
11、数据链路层
数据链路层的主要功能:通过各种控制协议,将有差错的物理信通道变成无差错的、能可靠传输数据帧的数据链路层
12、网络层
实现数据包的选路和转发,通信的两台主机是不直接相连的,而是通过多个中间节点(路由器)连接的,网络层的任务就是选择这些中间节点,以确定两台主机之间的通信路径。
网络层最主要的是IP协议,IP协议根据数据包的IP地址来决定如何投递他,如果数据包不能直接发送给主机,ip协议就会为他找一个合适的路由器,将数据包交给路由器来转发,多次重复这一过程,数据包最终到达主机,或者因为发送失败而丢弃。
网络层另外一个很重要的协议是ICMP协议,他是IP协议的重要补充,主要用于检测网络连接
ip协议为上层协议提供无状态、无连接、不可靠的服务
无状态:通讯双方不同步传输数据的状态,所以IP数据的发送传输、接收都是相互独立、没有上下文关系的,缺点是无法处理乱序、重复的IP数据包。
无连接:IP通信双方都不长久的维持对方的任何信息,这样上层协议每次发送信息都得明确指明对方的IP地址
不可靠:IP协议不能保证数据报准确的到达接收端,他只是承诺尽最大努力
13、传输层
传输层:为两台主机上的应用程序提供端到端的通信,与网络层使用的逐跳通信不同,传输层只关心起始端和目的端,而不在乎数据包的中转过程
传输层的主要协议有三个:TCP协议 UDP协议和SCTP协议
(1)TCP协议(传输控制协议)
为应用层提供可靠的面向连接的和基于流的服务,TCP协议使用超时重传,确认应答等方式来确保数据包被正确的发送至目的端,TCP协议是可靠的,使用TCP协议通讯的双方必须先建立TCP连接,并在内核中为该连接维持一些必要的数据结构,比如连接状态、读写缓冲区等,等通讯结束后,双方必须关闭连接以释放这些内核数据,TCP服务是基于流的,基于流的数据没有长度限制,他远远不断的从通讯的一端流向另外一端,发送端可以逐个字节的向数据流中写入数据,接收端也可以逐个字节的将他们读出。
(2)UDP协议(用户数据报协议)
与TCP协议完全相反,他为应用层提供不可靠、无连接,基于数据报的服务,UDP协议无法保证数据从发送端正确的传输到目的端,如果发送失败,UDP也只是通知应用程序发送失败,使用UDP协议,应用程序通常要自己处理数据确定、超时重传。UDP协议是无连接的,每次通讯都需要指定接收端的地址,基于数据报的服务是相对于基于流的服务来说的,每次UDP数据报都有一个长度,接收端必须以该长度为最小单位,将其内容一次性读出,否则数据将被截断
(3)SCTP协议(流控制传输协议)
为了在因特网上传输电话信号而设计的
14、应用层
应用层负责处理应用程序的逻辑
15、网络应用程序通讯流程
1、发送数据,从应用层到传输层
2、传输层在数据前面加上TCP/UDP的报头,再发送给网络层
3、网络层再添加自己的IP报头后,发送给数据链路层
4、数据链路层将数据封装成能够在网络中独立传输的数据单元,即数据帧(加帧头和帧尾),将数据帧通过网络传输给另外一台主机
5、从下到上依次拆包,送到应用层,得到数据
16、字节序列
大端、小端
大端为网络字节序列
17、网络编程头文件
#include<sys/socket.h>
#include<netinet/in.h>
#include <arpa/inet.h>