1、网络:在计算机领域中,网络是信息传输、接收、共享的虚拟平台,通过它把各个点、
面、体的信息联系到一起,从而实现这些资源的共享。
2、互联网(internet):是网络与网络之间所串连成的庞大网络,这些网络以一组通用
的协议相连,形成逻辑上的单一巨大国际网络。
3、网络通讯的主角: 在不同主机上的两个进程
4、在网络一个进程: IP 地址 & 端口号
5、MAC 地址: 网卡地址 === 主机地址
6、网络层次结构: OSI 协议模型 TCP/IP 协议模型
应用层 会话层 表示层 传输层 网络层 数据链路层 物理层
应用层 传输层 网络层 数据链路层
3、网络通讯的主角: 在不同主机上的两个进程
4、在网络一个进程: IP 地址 & 端口号
5、MAC 地址: 网卡地址 === 主机地址
6、网络层次结构: OSI 协议模型 TCP/IP 协议模型
应用层 会话层 表示层 传输层 网络层 数据链路层 物理层
应用层 传输层 网络层 数据链路层
应用层:与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。
会话层:它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消
息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,
则用数据代表表示层。
表示层:这一层的主要功能是定义数据格式及加密。
传输层:这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的
输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。
网络层:这层对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式
和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包
的分段方法。
数据连接层:它定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。
物理层:OSI的物理层规范是有关传输介质的特这些规范通常也参考了其他组织制定的标准。连接头、帧、帧
的使用、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。
7、怎样完成网络编程:
服务器: 提供数据的为服务器
客户端: 获取数据的为客户端
8、协议的选择:
TCP: 面向连接的 可靠的 流式服务
UDP: 无连接 不可靠的 数据报服务
9、TCP 的编程流程:
服务器(server): socket(套接字) bind(命名) listen(监听)
服务器: 提供数据的为服务器
客户端: 获取数据的为客户端
8、协议的选择:
TCP: 面向连接的 可靠的 流式服务
UDP: 无连接 不可靠的 数据报服务
9、TCP 的编程流程:
服务器(server): socket(套接字) bind(命名) listen(监听)
accept(拿一个链接出来) recv/send(接发数据) close
客户端( client): socket /*bind*/ connect recv/send close
int socket(int domain, int type, int protocol);
domain:: 协议簇 AF_INET
type:: 选择协议 SOCK_STREAM(tcp) SOCK_DGRAM(udp)
protocol:: 0
int bind(int sockfd, struct sockaddr*addr, int addrlen);
addr:: 指定 IP 地址和端口号
struct sockaddr_in
{
sa_family_t sin_family; // 地址簇 AF_INET
u_int16_t sin_port;// 端口号 网络字节序(大端模式) PC 机(小端模式)
struct in_addr sin_addr;// IP 地址
}
structin_addr
{
u_int32_t s_addr; // IP 地址最终的表示
}
int listen(intsockfd, int size);
int accept(int sockfd, struct sockaddr*addr, int *addrlen);
返回值: 获取到的和客户端连接的文件描述符
addr:: 记录客户端的 IP 地址和端口号
int connect(int sockfd, struct sockaddr*addr, int addrlen);
addr:: 要连接的服务器的 IP 地址和端口号
客户端( client): socket /*bind*/ connect recv/send close
int socket(int domain, int type, int protocol);
domain:: 协议簇 AF_INET
type:: 选择协议 SOCK_STREAM(tcp) SOCK_DGRAM(udp)
protocol:: 0
int bind(int sockfd, struct sockaddr*addr, int addrlen);
addr:: 指定 IP 地址和端口号
struct sockaddr_in
{
sa_family_t sin_family; // 地址簇 AF_INET
u_int16_t sin_port;// 端口号 网络字节序(大端模式) PC 机(小端模式)
struct in_addr sin_addr;// IP 地址
}
structin_addr
{
u_int32_t s_addr; // IP 地址最终的表示
}
int listen(intsockfd, int size);
int accept(int sockfd, struct sockaddr*addr, int *addrlen);
返回值: 获取到的和客户端连接的文件描述符
addr:: 记录客户端的 IP 地址和端口号
int connect(int sockfd, struct sockaddr*addr, int addrlen);
addr:: 要连接的服务器的 IP 地址和端口号
服务器:
客户端:
先启动服务器,再启动客户端,结果如下:
服务器不会关闭,客户端发送一次,服务器接收一次。
注意: netstat -atp 显示本机上所有的 TCP 服务程序以及其占用的端口号