网络编程知识点

  1. Internet的历史

①1958年美国总统艾森豪威尔向美国国会提出建立国防部高级研究计划署(DARPA),简称ARPA。

②1968年6月DARPA提出“资源共享计算机网络”,目的在于让DARPA的所有电脑互连起来,叫做阿帕网(ARPAnet)。阿帕网是英特网的雏形。使用网络控制协议(NCP),不能互联不同类型的计算机和不同类型的操作系统,没有纠错功能。

③1973年由KahnVinton Cerf两人合作为ARPAnet开发了新的互联协议。

④1974年12月KahnVinton Cerf两人发布了TCP协议,该协议分为两个不同的协议,分别是用来检测网络传输中差错的传输控制协议TCP专门负责对不同网络进行互联的互联网协议IP

1983年停止使用网络控制协议(NCP),全部使用TCP/IP协议

  1. OSI模型与TCP/IP协议体系结构
  1. 协议

通信双方所遵守的通信规则。

  1. 网络体系结构

网络的层次结构每层所用协议的集合,每一层实现不同的功能,每一层向上层服务,同时使用下层提供的服务。

  1. OSI模型与TCP/IP协议以及每一层相对应的协议

TCP/IP模型

OSI模型

功能

TCP/IP协议族

应用层

应用层

文件传输,电子邮件,文件服务,虚拟终端

TFTP、HTTPSNMPFTPSMTP、DNS、Telnet

表示层

数据格式化,代码转换,数据加密

会话层

解除或建立与别的节点的联系

传输层

传输层

提供端对端的接口

TCPUDP

网络层

网络层

为数据包选择路由

IP、ICMP、IGMP、RIP、OSPF、BGP

网络接口

与物理层

数据链路层

传输有地址的帧以及错误检测功能

SLIP、CSLIP、PPP、ARP、RARP、MTU

物理层

以二进制数据形式在物理媒体上传输数据

ISO2110、IEEE802.1、EEE802.2

TCP/IP协议如果是五层的话,分别是应用层、传输层、网络层、数据链路层、物理层。

  1. TCP/IP协议
  1. TCP/IP协议族常用协议

TCP(Transport Control Protocol)传输控制协议

IP(Internetworking Protocol)网间协议

UDP(User Datagram Protocol)用户数据报协议

ICMP(Internet Control Message Protocol)互联网控制信息协议

SMTP(Simple Mail Transfer Protocol)简单邮件传输协议

SNMP( Simple Network manage Protocol)简单网络管理协议

HTTP(Hypertext Transfer Protocol)超文本传输协议

FTP(File Transfer Protocol)文件传输协议

ARP(Address Resolution Protocol )地址解析协议(通过IP地址得到MAC地址

  1. 一帧数据(二进制)

以太网头

IP头

TCP头

FTP头

客户数据

CRC

14字节

20字节

20字节

1460字节

应用层数据包

TCP段

IP数据报(46字节~1500字节)

以太网数据帧

  1. TCP和UDP协议
  1. 有连接

正式数据传输之前确保双方都能够收和发。

  1. 无连接

直接传输数据,不管是否能收和发。

  1. 可靠

数据无误、数据无丢失、数据无失序、数据无重复到达的通信。

  1. 不保证可靠

有可能可靠,也有可能不可靠。

  1. 共同点

TCP和UDP协议都是传输层协议。

  1. 不同点

TCP:有连接,可靠

UDP:无连接,不保证可靠

  1. 适用场合

Tcp适合于对传输质量要求较高,以及传输大量数据的通信,比如登录、文件的传输等。

Udp适合于对传输速度要求较高,以及小尺寸数据的通信,比如视频会议等。

  1. 预备知识
  1. 套接字(Socket)

定义

①Socket是一个连接应用层和传输层(用户空间和内核空间)的网络编程的接口。

②是一个特殊的文件。

③通过IO进行访问。

④如果是OSI模型,则位于会话层和传输层之间;如果是TCP/IP模型,则位于应用层和传输层之间。

⑤并不仅限于TCP/IP协议。

⑥既可以面向有连接,也可以面向无连接。

套接字的类型

①流式套接字(SOCK_STREAM):提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制

②数据报套接字(SOCK_DGRAM):提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。

③原始套接字(SOCK_RAW):可以对较低层次协议如IP、ICMP直接访问。

  1. IP地址

定义

iP地址根据网络地址的不同,分为A类、B类、C类、D类、E类

ip地址的组成

网络地址+主机地址

A类

1个字节的网络地址+3个字节的主机地址

网络地址的最高为必须是0

1.0.0.0~126.255.255.255

B类

2个字节的网络地址+2个字节的主机地址

网络地址的最高位必须是10

128.0.0.0 ~ 191.255.255.255

C类

3个字节的网络地址+1个字节的主机地址

网络地址的最高位必须是110

192.0.0.0 ~223.255.255.255

形式

IP地址为32位(IPv4)或者128位(IPv6)。

网络适配地址:127.0.0.1

作用

同一个网络内区分不同的主机。

相关函数

  1. int inet_aton(const char *strptr, struct in_addr *addrptr);

功能:将点分十进制的IP地址转化成二进制的IP地址,并将其存储在addrptr指向的地址中。(发送方)

头文件:#include <arpa/inet.h>

参数1:十进制的IP地址。

参数2:指向二进制IP地址的存储地址。

返回值:地址有效,非零。

地址无效,零。

  1. in_addr_t inet_addr(const char *strptr);

功能:将十进制的IP地址转化成二进制的IP地址。(发送方)

参数1:十进制的IP地址。

返回值:成功返回转换后的地址。

  1. char *inet_ntoa(struct in_addr inaddr);

功能:将32位网络字节序二进制地址转换成点分十进制的字符串。(接收方)

  1. 端口号

功能

同一个主机区分不同的网络相关的进程。

端口号范围

众所周知端口:1~255(不能用)

Unix系统占用端口:256~1023(不能用)

已登记端口:1024~49151

动态或私有端口:49152~65535

  1. 字节序(由CPU决定)

大端序

高地址存放低字节,低地址存放高字节。网络字节序为大端序。

小端序

高地址存放高字节,低地址存放低字节。

字节序转换函数

主机字节序---->网络字节序

u_long htonl(u_long hostlong);

u_short htons(u_short short);

网络字节序---->主机字节序

u_long ntohl(u_long hostlong);

u_short ntohs(u_short short);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追求~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值