javascript
사용자
-----------------
응용 계층
표현 계층
세션 계층
전송 계층
네트워크 계층
데이터 링크 계층
물리 계층
-----------------
전선
목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요.
전송 계층의 기능
- 오류를 점검한다. (오류 발생 시 데이터 재전송)
- 전송된 데이터의 목적지가 어떤 어플리케이션인지 판단한다.
연결형 / 비연결형 통신
전송 계층의 특징은 신뢰성/정확성과 효율성으로 구분할 수 있다.
신뢰성/정확성에 포커스를 둔 것이 연결형, 효율성에 포커스를 둔 것이 비연결형.
연결형 통신
- 상대편과 확인해가면서 통신을 하는 방식.
- TCP 프로토콜이 바로 이 방식
비연결형 통신
- 상대편을 확인하지 않고 데이터를 보냄
- UDP 프로토콜이 바로 이 방식
javascript
컴퓨터1
- 전송 계층 : TCP/UDP 헤더를 붙여 세그먼트를 만든다.
- 네트워크 계층 : IP 헤더를 붙여 IP 패킷을 만든다.
- 데이터링크 계층 : 이더넷 헤더와 트레일러를 붙여 프레임을 만든다.
- 물리 계층 : 프레임을 전기신호로 변환 후 전송.
- 물리 계층 : 전기신호를 프레임으로 변환
- 데이터링크 계층 : 이더넷 헤더와 트레일러 분리.
- 네트워크 계층 : IP 헤더를 분리
- 전송 계층 : TCP/UDP 헤더를 분리
컴퓨터2
TCP 프로토콜
TCP 헤더와 다양한 요소
다음과 같은 요소들이 들어간다.
javascript
출발지 포트번호, 목적지 포트번호, 일련번호, 확인 응답 번호, 헤더길이,
예약영역, 코드비트, 윈도우 크기, 체크섬, 긴급 포인터, 옵션
TCP로 통신을 하려면 먼저 연결을 확립해야 하는데, 이때 중요한 역할을 하는 것이 코드비트이다.
javascript
<코드 비트>
URG / ACK / PSH / RST / SYN / FIN
0 / 0 / 0 / 0 / 0 / 0
SYN : 연결요청
ACK : 응답요청
연결 : 3-way 핸드쉐이크
코드비트의 SYN과 ACK 항목의 값을 이용해 연결 요청과 연결 응답을 지정한다.
이 과정이 3번에 걸쳐서 일어나기 때문에 이를 3-way 핸드쉐이크 라고 한다.
javascript
컴퓨터1 <---> 컴퓨터2
--------------------------------------------
1. 1->2로 가는 연결 확립 요청을 확립 보낸다.
SYN = 1, ACK = 1
2. 1->2에 대한 연결 확립 응답 + 2->1로 연결 확립 요청을 보낸다.
SYN = 1, ACK = 1
3. 2->1에 대한 연결 확립 응답.
SYN = 0, ACK = 1
연결 종료시에는 FIN과 ACK를 이용한다.
javascript
컴퓨터1 <---> 컴퓨터2
--------------------------------------------
1. 1->2로 가는 연결 종료 요청을 확립 보낸다.
ACK = 0, FIN = 1
2. 1->2에 대한 연결 종료 응답
ACK = 1, FIN = 0
3. 2->1로 연결 종료 요청을 보낸다.
ACK = 0, FIN = 1
3. 2->1에 대한 종료 확립 응답.
ACK = 1, FIN = 0
송신과 수신 : 일련번호와 확인응답번호
실제 송수신을 할 때 쓰는 두 가지 번호를 알아보자.
- 일련번호 : 이 데이터가 몇 번째 번호인지를 알려 줌 (보내는 입장에서)
- 확인응답번호 : 이 데이터가 몇 번째 번호인지를 알려 줌 (받는 입장에서)
- 다음에 받고 싶은 데이터에 관한 번호이기도 하다.
- 이 과정을 재전송 제어라고 한다. (두 번호를 통한
맨 처음에 지정되는 일련번호와 확인응답번호는 3-way 핸드셰이크가 이뤄질 때 결정된다.
javascript
1. 200바이트 데이터 송신
- 3001, 4001
2. 3001번의 데이터를 받았으니, 3201번을 보내달라
- 4001, 3201
3. 200바이트 데이터 송신
- 3201, 4001
송신과 수신 : 윈도우 크기
세그먼트를 한번 보내고 상대방이 확인응답을 다시 반환하는 구조는 비효율적.
따라서, 세그먼트를 연속해서 보내고, 확인응답을 반환하면 효율이 높아짐.
이때, 세그먼트를 임시로 저장할 버퍼가 있으면 됨.
버퍼의 사이즈를 결정하는 것이 바로 윈도우 크기.
윈도우 크기 역시 처음 3-way 핸드셰이크를 할 때 결정.
데이터의 종류 : 포트 번호
포트 번호를 이용해 데이터가 어떠한 어플리케이션에 해당하는지 확인.
DNS = 53, SSH = 22, HTTP = 80 등등..
UDP 프로토콜
- 비연결형 통신
- 3-Way 핸드셰이크를 일일히 진행하지 않음.
- 데이터를 빠르게 보내는 것이 목적이라 스트리밍 동영상에 쓰임.
- TCP와 다르게 확인하는 과정이 적어서 빠르다.
- 브로드캐스트 통신을 할 때도 쓰임.
UDP 헤더와 다양한 요소
javascript
출발지 포트번호, 목적지 포트번호, 길이, 체크섬