8bit = 1byte = 영어 1글자 가능 -> 8bit통신 사용하는 이유
통신
TCP(transmission control protocol) -> 3 handshake기반
프로토콜 -> 동등한관계에서 상호 규약
인터페이스 -> 동등하지 않은 관계에서의 상호 규약
보안의 3요소 기밀성, 무결성, 가용성
가용성-> 필요한 시점에 정상적으로 동작하는것 : TCP
RSA(공개키,암호키) ->홍군-청군 이야기
기밀성 -> 인가되지 않는 접근 방지 : RSA
무결성 -> 무단으로 변경되지 않은것 : RSA
TCP + RSA -> 완벽한 통신가능
대칭키->클라이언트(브라우저)-카카오-내가만든서버
1. 클라이언트가 카카오에 자신의 id,password를 보낸다
2. 카카오가 클라이언트한테 인증 토큰을 보낸다
3. 클라이언트가 나한테 인증 토큰을 보낸다
4. 내가 카카오한테 클라이언트가 준 인증 토큰을 보낸다
5. 카카오가 인증토큰이 정상이다라고 판단해주면 나는 클라이언트가 들어오게 한다
서킷 스위칭 VS 패킷 스위칭
서킷 : 2개의 노드 사이에 존재하는 회선(서킷)으로 데이터를 통신하며
정해진 길로만 움직이고 큰 데이터를 보내면 다른쪽에서는 기다려야 한다
새로운 장치와 통신하기 위해선 회선을 추가해야 한다
패킷 : 데이터를 아주 작은 단위로 쪼개서 동시 다발적으로 데이터를 출발 시킨다
이동방향도 연결되어 있는 여러 엣지를 통해서 움직인다
도착한 패킷들은 역직렬화를 통해서 합쳐진다
스트림
앱에서 다른앱으로 데이터를 보낼때 OS로 내려가야한다
이때 통하는물길을 스트림이라고 한다
스트림은 1바이트 단위로 데이터가 전송된다
앱에서 OS로 데이터를 보내면 아웃풋 스트림에 아웃풋을 하는것
버퍼
데이터를 하나씩 보내면 힘드니까 원래는 배열을 사용하다가 버퍼를 사용한다
버퍼에 데이터가 다 차면 자동으로 플러쉬 된다
만약 버퍼에 데이터를 다 못채워도 강제로 플러쉬를 해야할때가 있다
EX) 버퍼는 4바이트인데 HELLO를 보낼려고 하면 HELL 1번 자동 플러쉬, O만 담아서 강제로 플러쉬
버퍼가 보조 스트림이 되면서 OS로 내려가는데 OS입구에 소켓이 존재한다
소켓
소켓은 네트워크 통신을 위한 파일이다
데이터카 소켓을 타고 내려가는 순간 바이트형식의 데이터가 아닌 더 작은 조각인 세그먼트가 된다
여기서 세그먼트에 출발,도착 IP,순서를 캡슐화 해서 출발한다
이를 패킷이라 한다
패킷,라우터
패킷은 라우터를 통해서 포딩되며 전송된다
이때 유실되는 패킷들도 존재하는데 TCP,UDP에 따라 3-HAND-SHAKE를 사용하기도 한다
UDP는 동영상 스트리밍 서비스에 사용되기도 하는데 동영상이라는게 초당 많은 이미지가 순식간에 지나가는거라
중간에 몇몇 데이터가 유실되도 큰 의미가 없다
소켓은 다른 소켓이랑 연결하기 위해서 상대방 포트 번호를 알아야 한다
소켓 이후로의 동작은 몰라도 된다
역직렬화
쭈루룩해서 다른 컴퓨터로 데이터가 도착했을때 기계어로 된 세그먼트가
다시 인간이 이해할 수 있는 데이터로 변환되는데 이를 역증여,역질렬화 라고 한다
★
버퍼는 BufferdReader, BufferdWriter가 있다
버퍼는 반드시 앱과 소캣이 연결되어 있어야 한다
앱에서 바이트 스트림으로 데이터를 버퍼에 보낸다
스트림->버퍼->소켓
데이터는 위와 같은 방식으로 상대방한테 전해지는데
이때 데이터를 받을려면 리드버퍼가 존재해야한다
데이터를 받고 TCP를 만족하기 위해서 다시 보낸다
가장 처음 데이터를 보내는걸 리퀘스트라 하고
응답하는걸 리스펀스라 한다
이 회선을 유지하면 자유롭게 데이터 통신을 할 수 있는데
웹은 프로토콜에 따라서 이 회선을 유지하지 않고 끊는다
'SpringBoot > PNUMiniBootCamp' 카테고리의 다른 글
CH07,CH08 서블릿(PNU-BACKEND-BOOTCAMP) (1) | 2024.01.23 |
---|---|
CH04 소켓 통신(PNU-BACKEND-BOOTCAMP) (1) | 2024.01.23 |
CH01 자바 OOP(PNU-BACKEND-BOOTCAMP) (0) | 2024.01.22 |