전송 계층
전송 계층은 수신지에 신뢰할 수 있는 데이터를 전송하기 위해 필요한 계층이다.
전송 계층에는 오류를 점검할 수 있는 기능이 있다.
네트워크 계층에서는 수신지까지 데이터를 전송하고 전송계층에서는 데이터가 잘 도착했는 지 확인한다. 또한 전송 계층은 전송된 데이터의 수신지가 어떤 어플리케이션인지 확인하는 기능이 있다.
전송 계층은 프로토콜과 관련된 계층으로 오류 복구와 흐름 제어를 담당한다.
OSI 7계층 중 네 번째 계층으로 데이터를 양방향으로 전송하는 계층이다.
네트워크 계층에서 전송한 데이터와 실제 운영체제의 프로그램이 연결되는 통신 경로이다.
다음 그림은 전송 계층, 세션 계층, 응용 계층의 관계를 보여준다. 전송 계층의 헤더에는 포트 주소, 소켓 주소, 순서 번호 등이 포함된다. 전송 계층은 세션 계층에서 온 데이터를 수신할 때 데이터를 전송할 수 있는 세그먼트로 나누고 수신 측에서 조립할 수 있도록 순서를 표시한다.
네트워크 계층은 전송해야 하는 시스템에 각 패킷을 전송하는 역할을 하고 전송 계층은 해당 시스템의 응용프로그램에 모든 데이터를 전송하는 역할을 한다. 전송 계층의 기능은 다음과 같다.
- 연결 제어: 패킷을 하나의 경로로 보낼 것인지 결정
- 수신지로 데이터 전송: 수신지에서 데이터의 모든 패킷 전송과 도착을 검사한다.
- 단편화: 데이터를 전송 가능한 세그먼트로 나눈고 순서 번호를 기입한다.
- 재조립: 수신지의 전송 계층에서 순서 번호에 따라 데이터를 재조립한다.
전송 계층의 통신 방식
신뢰할 수 있는 데이터를 정확하게 전송하는 통신을 연결형 통신이라 하고, 효율적으로 데이터를 전송하는 통신을 비연결형 통신이라고 한다.
연결형 통신(TCP)은 신뢰성이 우선이므로 데이터를 전송할 때 여러 번 확인하고 전송하지만, 비연결형 통신(UDP)은 효율성이 우선이므로 확인 절차 없이 일방적으로 데이터를 전송한다.
TCP
연결 지향형 프로토콜인 tcp는 신뢰성 있는 바이트 스트림 서비스를 제공한다.
연결 지향은 응용 프로그램이 데이터를 주고 받기 전에 서로 tcp 연결을 확립해야 함을 의미하고, 신뢰성 있다는 말은 데이터를 성공적으로 수신했거나 오류가 발생했음을 알려주는 것을 의미한다.
데이터 전송 서비스는 전이중 방식 서비스이다.
연결 지향형 프로토콜은 송신 측 컴퓨터와 수신 측 컴퓨터가 데이터를 전송하기 전에 먼저 데이터를 송수신할 수 있는 연결 통로를 만들고 데이터를 전송하는 프로토콜이다.
연결 지향형 프로토콜은 신뢰성 있는 데이터 전송을 보장하며 오류가 발생하면 수신자에게 알려준다.
포트 번호
포트는 TCP가 상위 계층으로 데이터를 전송하거나 상위 계층에서 TCP로 데이터를 전송할 때 상호 간에 사용하는 데이터 이동 경로이다.
상위 계층 프로토콜과 하위 계층 프로토콜이 같은 포트를 사용해야지만 통신할 수 있다.
통신 할 때 여러 웹 사이트 중에서 동시에 파일을 다운로드 할 수 있다. TCP 프로토콜이 포트를 여러 개 사용하여 상위 계층의 프로그램과 각각 따로 통신하기 때문에 파일을 다운로드 할 수 있다.
- 웹 서비스는 80번 포트를 사용한다.
- 포트를 80번이 아닌 다른 포트를 사용하면 해당 포트를 아는사람만 접속할 수 있으므로 어느정도 보안이 유지된다.
TCP 세그먼트
TCP 프로토콜은 전송을 위해 바이트 스트림을 세그먼트 단위로 나눈다. 세그먼트는 TCP를 이용하여 두 장치 간에 전달하는 데이터의 단위를 말한다.
TCP 헤더는 데이터를 수신지까지 데이터를 제대로 전송하는 데 필요한 정보를 가지고있다. 데이터를 전송하려면 먼저 연결을 확립해야 한다.
- 송신지 포트 번호: Source Port Address 필드는 세그먼트를 전송하는 송신지 호스트에 있는 응용프로그램의 포트번호이다.
- 수신지 포트 번호: Destination Port Address 필드는 수신지 호스트에서 수행하는 프로세스가 사용하는 포트 번호이다.
- 순서 번호: Sequence Number 필드는 세그먼트에 포함된 데이터의 첫 번째 바이트에 부여된 것으로 32비트의 부호 없는 번호이다. 0부터 시작해서 232-1을 초과하면 다시 0으로 되돌아온다. TCP는 신뢰성있는 연결을 보장하기 위해 전송하는 바이트마다 번호를 부여한다.
- 확인 응답 번호: Acknowledegement Number 필드는 세그먼트를 수신하는 노드가 상대편 노드에서 수신하려는 바이트 번호이다. 이 번호는 성공적으로 수신한 마지막 바이트 순서 번호 + 1이다.
- 헤더 길이: Header Length 필드는 TCP 필드의 길이를 4바이트 워드 값으로 나타내며, 헤더 길이는 20~60바이트가 될 수 있다. 따라서 이 필드의 값은 5x4 = 20에서 15x4 = 60 사이이다.
- 예약: 6비트의 Reserved 필드는 나중에 사용하기 위해 예약된 필드이다.
- 코드 비트: 연결의 제어 정보가 기록되는 Code Bit은 TCP 헤더의 107번째부터 112번째의 비트이다.코드 비트는 비트 별로 역할이 정해져 있으며 초깃값이 0이고 비트가 활성화되면 1이 된다. 데이터를 전송할 때 연결을 확립하려면 코드 비트 중 연결을 요청하는 SYN과 응답 코드인 ACK가 필요하다.
데이터를 전송하기 전에 연결을 확립하기 위해 패킷 요청을 세 번 교환하는 것을 3-way 핸드셰이킹이라고 한다. 3-way 핸드 셰이킹 과정은 다음과 같다.
연결 과정
1. SYN
2. ACK + SYN
3. ACK
데이터를 전송한 뒤에는 연결을 끊기 위한 요청을 교환해야 한다. 연결을 끊을 때는 FIN과 ACK를 사용하는데 FIN은 연결 종료를 뜻한다.
연결 종료 과정
1. FIN
2. ACK
3. FIN
4. ACK
TCP는 데이터를 분할해서 전송하는데 이때 데이터에 일련번호, 즉 순서 번호를 부여하면 수신 측은 몇 번째 데이터를 받았는 지 알 수 있다. 확인 응답 번호는 수신 측이 몇 번째 데이터를 수신했는지 송신측에 알려주는데 사용한다.
검사합
1. n비트로 쪼갠 후 합한다.
2. 1의 보수를 구해서 검사합으로 도출한다.
TCP 헤더의 선택 사항 필드가 지정되지 않았다면 TCP 헤더의 크기는 20바이트이며 전송되는 바이트는 보낸 순서대로 수신지 컴퓨터에 도착한다. 반면 TCP 하위 계층인 IP 계층은 연결형 서비스를 제공하므로 패킷이나 데이터 세그먼트가 수신측의 IP 계층에 순서대로 도착하지 않을 수 있다. 이때는 수신 측의 TCP 계층에서 도착한 패킷이나 데이터 세그먼트 순서를 맞춘다. 네트워크 문제로 패킷이 손실되면 TCP는 재전송을 요청한다.
TCP 서비스를 이용하려면 클라이언트의 소켓 주소와 서버의 소켓 주소가 필요하다.
- 긴급포인터 URG는 긴급한 데이터의 마지막 바이트 순서 번호가 urgent pointer 값과 순서 번호 값의 합으로 계산된다.
- 옵션: 송신지에서 수신하고자 하는 세그먼트의 최대 크기를 MSS로 나타낸다.
tcp 연결 관리
1. 300바이트 전달, 순서번호: 5001
2. 5301번 receive 순서번호: 6001
3. 300바이트 전달 순서번호: 5301
4. 5601번 receive 순서번호: 6001
구성 = [데이터 크기] + [수신자가 보내야 할 번호]
loss가 발생할 경우 잃어버린 번호를 다시 ack로 보냄
- 수신자, 송신자 모두 동일
패킷을 전송할 때 네트워크 상황에 따라 패킷의 도착 순서가 바뀔수도 있고 도중에 패킷이 사라질 수도 있다. 따라서 TCP는 패킷 번호를 사용하여 신뢰성있는 데이터를 전송한다.
송수신 측 컴퓨터가 상대방의 윈도우 크기를 확인함으로써 오버 플로우가 발생하지 않게 데이터를 전송할 수 있다.
UDP
UDP(사용자 데이터그램 프로토콜)는 RFC 786 문서에 정의된 비연결 지향 프로토콜로, TCP와 달리 패킷이나 흐름제어, 단편화 및 전송 보장 등의 기능을 제공하지 않는다.
UDP 통신은 요청 메시지와 응답 메시지만으로 구성되고 주로 적은 양의 데이터 전송에 사용된다.
예시
DNS, DHCP, SNMP
헤더 구조
1. 송신지 포트 번호(16비트)
2. 수신지 포트 번호(16비트)
3. 검사합(16비트)
TCP/IP 모델의 전송 계층에는 TCP와 UDP 프로토콜이 있다.
TCP는 송신지에서 수신지까지 문자 스트림을 전송하는데, 두 응용 계층이 서로 대화하는 것을 허용하는 신뢰성 있는 프로토콜이다.
UDP는 OSI 참조 모델에서 정의하는 전송 계층의 일부 역할을 무시하는 단순 전송 프로토콜이다. 응용 계층에서 사용된다.
NCP는 Netware 클라이언트와 서버 간의 파일 공유 등 다양한 네트워크 기능을 담당한다.
NCP는 워낙 다양한 기능을 수행하기 때문에 NCP 프로토콜에 해당하는 계층을 특정하기 어렵다
다양한 네트워크 기능을 담당하지만 모든 NCP 메시지를 IPX 데이터그램으로 캡슐화하여 전송하므로 전송 계층 프로토콜이라고 할 수 도 있다.