네트워크 #2 : TCP/IP
1. TCP(Transmission Control Protocol) / IP(Internet Protocol)
- 인터넷에서 컴퓨터들이 서로 정보를 주고받는데 쓰이는 프로토콜의 집합
- TCP는 많은양의 데이터를 가져와 패킷으로 컴파일 후 전송하고 수신받은 패킷을 원래 메세지로 재조립하는 역할을 하는 프로토콜이다
- IP는 인터넷에서 컴퓨터 위치를 찾아 패킷들이 목적지에 제대로 도착하게 하는 역할하는 프로토콜이다.
- TCP/IP 4계층 모델을 중심으로 설명한다.
프로토콜
컴퓨터와 네트워크가 서로 통신하기 위해서는 같은 방법으로 통신을 해야한다.
하지만 하드웨어와 운영체제들이 달라서 서로 통신하려면 규칙이 필요한데 이 규칙들이 '프로토콜'이다.
1) TCP/IP 4계층 모델 구조
- 제 4계층 : 애플리케이션 계층 ( Application Layer )
- 웹서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 층
- 프로토콜 : FTP, HTTP,SSH,SMTP,DNS
1. HTTP (Hypertext Transfer Protocol)
ⓐ 처음에는 서버와 브라우저간에 데이터를 주고 받기 위해 설계된 프로토콜
ⓑ 브라우저 뿐만 아니라 서버와 서버간의 통신할 때도 많이 사용
HTTP 특징
ⓐ 헤더를 통한 확장이 쉽습니다.

헤더에 데이터를 넣어서 HTTP통신을 할 때 쉽게 다른 값을 추가 할 수 있다.
ⓑ HTTP는 stateless합니다.

동일한 연결인데 이전 통신에 대한 기억이 없기 때문에 두 요청 속 연속적인 상태를 유지할 수 없다.
2. SSH ( Secure SHhell Protocol )
ⓐ 보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜
ⓑ 데이터 전송, 원격제어할 때 사용된다.
SSH 통신 방법
ⓐ Private Key and Public Key
비밀번호를 통한 접속이 아니라 key를 사용해 접속하려는 컴퓨터의 인증을 거친다.
private key : 외부에 노출되어서 안되는 키. 컴퓨터 내부에 저장되어 있다. 보통 암호화된 메세지를 복호화한다.
public key : 공개 되어도 안전한 키. 메세지 전송전 암호화 한다. 암호화된 메세지 복호화 불가.
3. FTP (File Transfer Protocol)
ⓐ 노드와 노드간의 파일을 전송하는데 사용되는 프로토콜
ⓑ 파일을 암호화해서 전송하는 FTPS 또는 SFTP로 대체되고 있다.
4. SMTP (Simple Mail Transfer Protocol)
ⓐ 인터넷을 통해 메일을 보낼 때 사용되는 프로토콜
ⓑ 라이브러리를 추가해 JS기반으로 SMTP를 통해 메일을 보낼 수 있다.
// create reusable transporter object using the default SMTP
transport
let transporter = nodemailer.createTransport({
host: "smtp.ethereal.email",
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: testAccount.user, // generated ethereal user
pass: testAccount.pass, // generated ethereal password
},
});
- 제 3 계층 : 전송 계층 ( Trasport Layer )
- 송신자와 수신자를 연결하는 통신 서비스를 제공한다.
- 애플리케이션 층과 인터넷 층사이의 데이터가 전달될 때 중계역할을 한다.
- 프로토콜 : TCP, UDP
1. TCP ( Transmission Control Protocol)

ⓐ 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜
ⓑ 연결 지향 방식으로 가상회선패킷교환방식을 사용한다.
*가상회선 하나에 각 패킷들이 전송된 순서대로 도착하는 방식
ⓒ 헤더의 길이는 20~60바이트로 가변적이다.
ⓓ 재전송과 체크섬 (오류검사)를 한다
ⓔ 3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다.
ⓕ 흐름제어를 통해 높은 신뢰성을 보장한다.
① 3-way handshaking

ⓐ 데이터를 전송하기 전에 송신하는쪽괴 수신하는 쪽이 연결되는 과정
ⓑ 접속을 요청하는 SYN플래그와 클라이언트의 접근을 수락하는 ACK플래그 를 사용한다.
1. SYN 단계: 클라이언트는 서버와 연결하기 위해 클라이언트의 ISN을 담아 SYN을 보낸다.
2. SYN + ACK 단계: 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보낸다.
3. ACK 단계: 클라이언트는 서버의 ISN + 1한 값인 승인번호를 담아 ACK를 서버에 보낸다.
② 4-way handshaking

ⓐ HTTP요청과 응답과정이 끝났을 때 연결을 종료하는 과정
ⓑ ACK플래그와 클라이언트가 서버로 연결 종료하겠다는 FIN플래그가 사용된다.
1. 연결 종료 시, 클라이언트가 서버로 FIN세그먼트를 보내고 FIN_WAIT_1 상태로 서버의 응답을 기다림.
2. 서버는 클라이언트로 ACK을 보내고 CLOSE_WAIT 상태
-> 클라이언트는 세그먼트를 받으면 FIN_WAIT_2 상태.
3. 서버는 LAST_ACK상태가 되며 일정 시간 이후에 클라이언트에 FIN 세그먼트를 보냄
4. 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내면 CLOSED 상태가 된다.
-> 클라이언트는 TIME_WAIT 이후 연결이 닫힘.
③ Time_Wait
ⓐ 지연 패킷 등이 발생했을 때 데이터 무결성을 해결하기 위해 패킷을 기다리는 시간
ⓑ FIN을 받은 클라이언트가 바로 연결된 소켓을 닫아버리면 FIN을 보내기 전에 보낸 패킷은 못받게된다.
그래서 클라이언트는 서버로부터 FIN을 받아도 일정 시간동안 대기해야한다.
2. UDT ( User Datagram Protocol )

ⓐ 데이터를 데이터그램 단위로 처리하는 프로토콜
ⓑ 비연결형 방식으로 데이터그램 패킷 교환방식을 사용한다.
*패킷이 독립적으로 이동하여 최적의 경로를 선택해 서로 다른 경로로 전송되는 방식
ⓒ 헤더의 길이는 8바이트로 고정된다.
ⓓ 오류검사는 체크섬만 지원된다.
ⓔ TCP보다 속도가 빠르다.
ⓕ 흐름제어가 없어 신뢰성이 보장되지 않는다.
- 제 2 계층 : 인터넷 계층 ( Internet Layer )
- 전송받은 네트워크 패킷을 지정된 IP주소로 전송하기 위해 사용되는 층
- 프로토콜 : IP, ARP, ICMP
- 제 1 계층 : 링크계층 ( Network Access Layer )
- MAC주소를 사용해서 데이터를 알맞은 주소로 전송을 하는 층
- 프로토콜 : Ethernet
2) OSI 7계층과 TCP/IP 4계층 간단 비교
- TCP/IP 4계층은 OSI 7 계층모델로 설명되기도 한다.
- TCP/IP 4계층은, TCP/IP 프로토콜 통신 과정에 초점을 맞추어, OSI 7계층을 좀 더 단순화 시킨 계층을 의미한다.
- OSI 7계층은 TCP/IP 4계층과 달리 애플리케이이션층을 3개층으로 나누고 링크 계층을 데이터링크.물리계층으로 나눠 설명한다.
계층 구조의 장점
- 각 계층별 처리 역할이 다르기 때문에, 계층별 간섭을 최소화할 수 있다.
- 각 계층은 서로 독립되어 있기 때문에 특정계층에 문제가 생겨도 다른 층에는 영향이 없다. -> 유지보수가 편하다.
- 다른 계층끼리는 데이터의 전달 과정을 구체적으로 알 필요가 없기 때문에, 데이터의 캡슐화와 은닉이 가능하다.
3) TCP/IP 4계층의 캡슐화, 비캡슐화
- 캡슐화
- 수신자에게 데이터를 보낼 때 데이터가 각 계층을 지나며 각 계층의 특징들이 담긴 헤더들이 붙여지는 과정
- 상위 계층에서 하위계층으로 데이터가 이동하면서 계층마다 필요한 정보를 헤더에 저장한다.
- 비캡슐화
- 캡슐화 되었던 정보들을 역순으로 제거하면서 애플리케이션 계층까지 도달하는 과정
- 캡슐화의 역과정
- 데이터가 하위계층에서 상위계층으로 이동할 때 계층마다 추가됐던 헤더를 읽고 처리한 후 제거한다.
4) PDU(protocol data unit)
- TCP/IP 4계층을 기반으로 설명했을 때 각 계층의 데이터 단위
- 세그먼트 : 적절한 크기로 쪼개진 조각
- 패킷 : 세그먼트에 SP(시작 포트)와 DP(목적지 포트)가 포함된 IP 헤더가 붙은 형태의 조각
- 프레임 : MAC주소 헤더와 CRC/체크섬 트레일러가 붙은 조각
※ 데이터 무결성 검사
- 순환중복검사 ( CRC )
● 데이터에 오류가 발생했는지 확인하는 코드를 데이터 뒤에 확장 데이터를 덧붙여 보내는 방식
● 송신측에서는 CRC값을 데이터에 붙인 코드워드를 전송하며, 수신측에서는 수신된 코드워드에서 CRC값을 이 용하여 에러 발견
- 체크섬
● 오류 정정을 통해 송신된 자료의 무결성을 보호하는 단순한 방법
● 나열된 데이터를 더하여 체크섬 숫자를 얻고, 정해진 비트수의 모듈라로 정해진 비트수로 재구성
5) MTU, MSS, PMTUD
① MTU ( Maximum Transmission Unit )
- 네트워크에 연결된 장치가 받아들일 수 있는 최대 데이터 패킷의 크기
- MTU를 기준해서 데이터는 패킷화 된다.
- MTU보다 큰 데이터 패킷은 작은조각으로 잘라져 분할될 수 있다. 분할된 패킷은 목적지에 도달하면 다시 조립된다.
- MTU는 바이트 단위며 최대 크기는 1500바이트이다.
분할 예시 )

① 컴퓨터 A와 서버 A가 서로 통신을 할 때 라우터 B와 라우터 C 를 거쳐야 한다.
② 라우터 C의 MTU는 1400 / 컴퓨터 A,서버 A, 라우터 B의 MTU는 1500인데 MTU의 차이를 모르고 패킷을 보낸다.
③ 라우터B의 MTU가 라우터 C의 MTU보다 크기 때문에 패킷이 분할된다.
BUT, 패킷 분할은 대기시간이 생기기 때문에 비효율적이다. 따라서 최대한 분할은 피해야 한다
- 분할이 안되는 이유
- IPv6 : 분할을 허용하지 않는다.
- IPv4 : IPv4 헤더에는 flags라는 필드에서 "Don't Fragment" 플래그가 활성화되면 분할은 불가능하다.
② MSS ( Maximum Segment Size )
- TCP 상에서 전송할 수 있는 사용자 데이터의 최대 크기
- MSS 값은 기본적으로 설정된 MTU 값에 의해 결정된다.
- 일반적으로 MTU는 1500바이트이며 MSS는 1460바이트이다.
- Ethernet 일 경우 MTU 1500에 IP Header 크기 20 Byte, TCP Header 크기 20 Byte를 제외한 1460이 MSS 값이다.
③ PMTUD ( Path MTU Discovery )
- 송수신자 간의 경로 상에서 패킷이 누락된 경우, 패킷의 크기를 낮추면서 MTU에 맞게끔 반복해서 보내는 과정
- 한마디로 MTU의 크기에 맞계 계속 줄이는 것을 말한다.
참고 자료
- https://dev-coco.tistory.com/144
- https://www.youtube.com/watch?v=BEK354TRgZ8
- https://www.cloudflare.com/ko-kr/learning/network-layer/what-is-mtu/