-
자바 개념 5(socket programming의 바탕 TCP/IP)학교 수업/자바프로그래밍 2020. 4. 23. 18:14
네트워크? 데이터를 교환하기 위해 전송 매체를 매개로 서로 연결되어 있는것
인터넷? 전세계 컴퓨터들이 서로 연결되어 있는 거대한 네트워크
자바수업에서 마지막으로 다루는 것이 채팅프로그램인데
채팅프로그램은 소켓 프로그래밍(=네트워크 프로그래밍)과 thread를 이용해 구현한다
socket 소켓
- 개념: 두 프로그램이 네트워크를 통해 서로 통신을 수행할 수 있도록 양쪽에 생성되는 단자
즉 프로세스 통신 간에 사용되는 양쪽 끝단을 의미한다.
소프트웨어 차원에서 원격에 존재하는 두 호스트를 연결해주는 매개체
- 자바 안에서 소켓의 종류에는 서버소켓과 클라이언트소켓이 있다.
- 소켓은 통신하기 위해 대표적으로 TCP와 UDP를 이용한다.
그렇다면 소켓을 이용한 프로그래밍에 대해 더 자세히 설명하기 전에
소켓이 통신하는 데 필요한 지식인 TCP와 UDP에 대해 알아야하는데
그 중 주로 사용하는 TCP에 대해서 자세히 설명해보겠다.
TCP는 보통 하위 계층에서 사용하는 IP와 엮어서 TCP/IP로 표현하는 경우가 많다.
(TCP와 IP는 별개지만, TCP를 기반으로 통신하는 것들이 IP위에서 동작하기 때문에)
따라서 TCP/IP 통째로 설명하겠다.
Protocl 프로토콜? 컴퓨터와 네트워크 기기가 상호 간에 통신하기 위한 규칙
TCP/IP(Transmission control protocol, Internet Protocol)
- TCP : 서버와 클라이언트간에 데이타를 신뢰성있게 전달하기 위해 만들어진 프로토콜
패킷을 조립하고, 손실된 패킷을 확인하고, 재전송 하도록 요청하는 기능을 함
packet 패킷?
데이터를 작게 나눈 단위
대략 1kbyte
- IP : 인터넷상의 주소 규칙, 각 장치를 나타내는 주소를 가리킴
이전에는 32bit의 값을 가지는 IPv4를 사용했지만, 주소 고갈로 인해 이제는 128bit의 값을 가지는 IPv6도 사용
->아래에서 더 자세히 설명하겠다.
- TCP/IP는 4계층으로 나뉘어져 있다.
OSI 7계층(Open Systems Interconnections, 시스템들의 연결을 위한 모델) 을 웹서비스에 맞게 4계층으로 단순화한 모델
4계층
Data link – Network – Transport – Application
링크 – 네트워크 – 전송 - 응용
1. 링크계층 : Ethernet, ATM 등 네트워크에 접속하는 하드웨어적인 면을 다룸
물리적 계층으로 IP주소를 MAC 주소로 변환
2. 네트워크계층 : 데이터를 정의하고 데이터의 경로를 라우팅
routing 라우팅
어떤 네트워크 안에서 통신 데이터를 보낼 최적의 경로를 선택하는 과정
ICMP, IGMP, IP 등
3. 전송계층 : 네트워크에 접속되어 있는 컴퓨터 사이의 데이터 흐름 제공
시스템을 연결하고 데이터를 전송하는 역할
TCP, UDP 등
4. 응용계층 : 유저에게 제공되는 애플리케이션에서 사용하는 통신의 움직임을 결정
HTTP(웹 접속), FTP(파일전송), Telnet, SMTP(메일보내기) 등
이렇게 계층화를 한 이유?
인터넷이 하나의 프로토콜로 되어있다면 사양 전체를 바꿔야 함.
하지만 계층화 되어있다면 해당 계층만 바꾸면 됨
또한, 계층화로 인해 자신의 계층만 신경쓰면 되므로 설계를 편하게 할 수 있음
- TCP/IP가 계층대로 통신하는 흐름
TCP/IP로 통신할 때 계층을 순서대로 거쳐 상대와 통신
송신하는 측은 애플리케이션 계층에서부터 내려가고, 수신하는 측은 네트워크 계층부터 올라감
HTTP를 예를 들어 설명하면 다음과 같은 순서로 통신한다.
1. 송신측 클라이언트의 애플리케이션 계층(HTTP)에서 어느 웹 페이지를 보고 싶다라는 HTTP 리퀘스트를 지시
2. 그 다음에 있는 트랜스포트 계층(TCP)에서는 애플리케이션 계층에서 받은 데이터(HTTP 메시지)를 통신하기 쉽게 조각 내어
(패킷으로 조각)
안내 번호와 포트 번호를 붙여 네트워크 계층에 전달
3. 네트워크 계층(IP)에서는 수신지 MAC 주소를 추가해서 링크 계층에 전달
이로써 네트워크를 통해 송신할 준비가 되었음
4. 수신측 서버는 링크 계층에서 데이터를 받아들여 순서대로 위의 계층에 전달하여 애플리케이션 계층까지 도달
5. 수신측 애플리케이션 계층에 도달하게 되면 클라이언트가 발신했던 HTTP 리퀘스트를 수신 가능
대충 어떻게 통신하는 지 봤다면 이제 IP 에 대해서 자세히 설명해보자.
IP(Internet Protocol)
- 개념 : 위에서 설명했듯이 인터넷 상의 주소 규칙
- 네트워크 층에 해당 되며, 이름 그대로 인터넷을 활용하는 거의 대부분의 시스템이 IP를 이용
- 역할 : 패킷을 목적지까지 전달하는 역할 및 그에 수반되는 기타 역할
네트워크 층에서 패킷 전달할 때 IP주소도 사용하지만 MAC주소도 필요
IP주소는 각 노드에 부여된 주소를 가리키고 MAC 주소는 각 네트워크 카드에 할당된 고유의 주소
IP주소는 변경 가능하지만 기본적으로 MAC 주소는 변경할 수 없다
IP 주소/ MAC 주소
IP주소: 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 특수한 번호네트워크에 연결된 장치가 라우터이든 일반 서버이든, 모든 기계는 이 특수한 번호를 가지고 있어야 한다.
이 번호를 이용하여 발신자를 대신하여 메시지가 전송되고 수신자를 향하여 예정된 목적지로 전달된다.
MAC 주소: 네트워크 세그먼트의 데이터 링크 계층에서 통신을 위한 네트워크 인터페이스에 할당된 고유 식별자
그림을 통해 패킷 전달 과정을 보자면
다음으로 중계할 곳의 MAC 주소를 사용하여 목적지를 찾아가는데
이때, ARP(Address Resolution Protocol: 주소 결정 프로토콜)이라는 프로토콜이 사용됨.
ARP는 주소를 해결하기 위한 프로토콜 중 하나인데, 수신지의 IP 주소를 바탕으로 MAC 주소를 조사할 수 있다.
목적지까지 중계를 하는 도중에 컴퓨터와 라우터 등의 네트워크 기기는 목적지에 도착하기 전까지 대략적인 목적지들로 이동하는데 이 과정을 라우팅이라고 한다.
IP와 네트워크에서 IP의 역할에 대해 대충 알았다면
이젠 TCP와 TCP의 역할에 대해 보자
IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리
TCP(Transmission Control Protocol)
- 개념 : 위에서 설명했듯이, 서버와 클라이언트 간의 데이터를 신뢰성 있게 전달하기 위한 프로토콜
연결지향적인 프로토콜
연결지향적? 클라이언트와 서버의 소켓이 미리 연결되있어야 데이터 송수신이 가능
데이터가 유실되면 데이터 재전송을 요청함으로써 신뢰성 보장
오류제어, 흐름제어, 혼잡제어, 타미어 재전송 등의 기능을 함(이는 나중에 네트워크 수업을 정리할때 다루도록 하겠다.)
- 전송계층에 해당
- 역할 : 송신 측에서는 용량이 큰 데이터를 패킷으로 나누는 역할
수신 측에서는 전달받은 패킷을 조립하고, 패킷이 빠져서 왔을 경우 혹은 손실되서 왔을 경우 재전송 요청하는 역할
- 연결지향적인 프로토콜이기 때문에, 클라이언트와 통신을 하기 위해 미리 연결을 맺어야함
→ three way handshake 를 통해 연결을 맺는다.
three way handshake : TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에
정확한 전송을 보장하기 위해 상대방 컴퓨터와 세션을 수립하는 과정
(양쪽 모두 데이터를 전송할 준비가 되있음을 보장)
그림으로 보자면
STEP 1 : 송신측에 접속을 요청하는 SYN 패킷을 보낸다.
STEP 2 : 수신측은 SYN 요청을 받고 송신측에 요청을 수락한다는 ACK와 SYN 패킷을 발송해
송신측이 다시 ACK으로 응답하기를 기다린다.
STEP 3 : 송신측이 수신측에 ACK을 보낸 이후로부터는 연결이 이루어지고 데이터가 오간다.
위와 같은 방식으로 통신하는 것이 신뢰성 있는 연결을 맺어 준다는 TCP의 3 way handshake 방식이다.
연결을 종료할 때는 four way handshake 사용
그림으로 보자면
STEP 1 : 연결을 종료하고자 하는 송신측은 FIN 패킷을 전송한다.
STEP 2 : 수신측은 알겠다는 ACK 패킷을 전송하고, 자신의 통신이 끝날 때까지 기다림
(아직 전송할 데이터가 남아있다면 이어서 전송)
STEP 3 : 수신측의 통신이 완전히 끝났다면 연결 종료 요청에 합의한다는 의미로 송신측에
FIN 패킷 전송
STEP 4 : 송신측이 확인했다는 ACK 패킷 보냄
//
포스팅 계획
소켓이 어떻게 통신하는지(TCP/IP)에 대한 대략적인 건 알았으니 총 3개에 걸쳐서
1. 소켓을 이용해 채팅프로그램을 어떻게 구현했는지 설명하고
2. 1:1채팅이 아닌 다인원 채팅프로그램을 구현하기 위한 배경인 thread를 설명하고
3. socket과 thread를 모두 사용한 다인원 채팅프로그램을 어떻게 구현했는지 설명하면 된다.
//
'학교 수업 > 자바프로그래밍' 카테고리의 다른 글
자바 개념 6(thread) (0) 2020.04.23 자바 개념 4 (입출력) (0) 2020.04.18 자바개념3 (상속) (0) 2020.04.16 자바 개념2 (클래스, 필드, 메소드, 제어자) (0) 2020.04.16 자바 개념 (0) 2020.04.16